你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> Android中getActivity()為null的處理方法

Android中getActivity()為null的處理方法

編輯:IOS開發綜合

媒介

在平常開辟中的時刻,我們常常會應用ViewPager+Fragment停止視圖滑動,在某些部門邏輯或許我們須要應用高低文Context(例如根本的Toast),然則因為Fragment只是依靠在Activity容器的一個試圖,假如須要拿到以後的Activity的高低文Context就必需經由過程getActivity()獲得。

但是,不曉得列位法式猿有無遇過湧現getActivity()湧現null的時刻招致法式報出空指針異常。

其實緣由可以歸結於由於我們在:

    (一)切換fragment的時刻,會頻仍被crash

    (二)體系內存缺乏

    (三)反正屏幕切換的時刻

      ....

以下情況都邑招致Activity被體系收受接管,然則因為fragment的性命周期不會跟著Actiivty被收受接管而被收受接管,是以才會招致getActivity()湧現null的成績。

處理

這裡總結三個處理辦法:

(一)樹立Context援用

     起首我們看下Fragment的性命周期:

   在Fragment的性命周期中,在性命周期處於onAttach()onDetach()之間的時刻getActivity()辦法才不會前往null。是以我們可以在fragment初始化的時刻樹立Context援用。

fragment燒毀的時刻燒毀援用。

代碼以下:

 @Override
 public void onAttach(Activity activity) {
  super.onAttach(activity);
  mCtx = activity;//mCtx 是成員變量,高低文援用
 }

  @Override
  public void onDetach() {
  super.onDetach();
  mCtx = null;
  }

(二)公道應用getapplicationcontext()

   在辦法1中應用暫時變量存儲Context高低文援用可以或許必定水平處理成績。因為在Android中,ApplicationServiceActivity都具有高低文,getapplicationcontext()可以獲得全局的高低文,所以只需法式不封閉,獲得的context很難為null~

(三)自界說本身的application

   第三種辦法其實與第二種辦法根本道理雷同,行將自界說的application中,暫時存儲application具有的高低文Context。在法式中,經由過程單利拜訪application的時刻獲得該高低文Context

詳細應用以下:

(1)在設置裝備擺設清單注冊本身的application

<application
 Android:name=".MyApplication"
 Android:icon="@drawable/ic_launcher"
 android:label="@string/app_name" >

(2)在Application中的onCreate存儲高低文,而且創立單利。

public class MyApplication extends Application {

 private static MyApplication instance;

 @Override
 public void onCreate() {
  super.onCreate();
  instance = this;//存儲援用
 }

 public static MyApplication getInstance(){
  return instance;
 }
}

總結

這裡只是我總結的幾個處置辦法,固然有其他開辟者有更好的建議可以或許提出來,如許更好。年夜家一路技巧分享,讓年夜家配合提高!

【Android中getActivity()為null的處理方法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved