欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中g(shù)etActivity()為null的解決辦法

 更新時間:2016年08月14日 09:41:40   作者:傻小孩b_移動開發(fā)  
在Android開發(fā)的時候可能遇過出現(xiàn)getActivity()出現(xiàn)null的時候?qū)е鲁绦驁蟪隹罩羔槷惓#敲从龅竭@種情況改如何解決,下面跟著小編一起去看看。

前言

在日常開發(fā)中的時候,我們經(jīng)常會使用ViewPager+Fragment進行視圖滑動,在某些部分邏輯也許我們需要利用上下文Context(例如基本的Toast),但是由于Fragment只是依附在Activity容器的一個試圖,如果需要拿到當(dāng)前的Activity的上下文Context就必須通過getActivity()獲取。

然而,不知道各位程序猿有沒有遇過出現(xiàn)getActivity()出現(xiàn)null的時候?qū)е鲁绦驁蟪隹罩羔槷惓!?/p>

其實原因可以歸結(jié)于因為我們在:

    (一)切換fragment的時候,會頻繁被crash

    (二)系統(tǒng)內(nèi)存不足

    (三)橫豎屏幕切換的時候

      ....

以上情況都會導(dǎo)致Activity被系統(tǒng)回收,但是由于fragment的生命周期不會隨著Actiivty被回收而被回收,因此才會導(dǎo)致getActivity()出現(xiàn)null的問題。

解決

這里總結(jié)三個解決方法:

(一)建立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中,Application、Service、Activity都擁有上下文,getapplicationcontext()可以獲取全局的上下文,所以只要程序不關(guān)閉,獲取的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存儲上下文,并且創(chuàng)建單利。

public class MyApplication extends Application {

 private static MyApplication instance;

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

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

總結(jié)

這里只是我總結(jié)的幾個處理方法,當(dāng)然有其他開發(fā)者有更好的建議能夠提出來,這樣更好。大家一起技術(shù)分享,讓大家共同進步!

相關(guān)文章

  • iOS錄屏和截屏監(jiān)聽的實現(xiàn)代碼

    iOS錄屏和截屏監(jiān)聽的實現(xiàn)代碼

    本篇文章主要介紹了iOS錄屏和截屏監(jiān)聽的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • iOS獲取當(dāng)前app的設(shè)備名稱和版本號等內(nèi)容

    iOS獲取當(dāng)前app的設(shè)備名稱和版本號等內(nèi)容

    本文主要介紹了iOS獲取當(dāng)前app的設(shè)備名稱和版本號等內(nèi)容的方法。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • 使用SDLocalize實現(xiàn)高效完成iOS多語言工作

    使用SDLocalize實現(xiàn)高效完成iOS多語言工作

    這篇文章主要介紹了使用SDLocalize實現(xiàn)高效完成iOS多語言工作的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • iOS應(yīng)用開發(fā)中的文字選中操作控件UITextView用法講解

    iOS應(yīng)用開發(fā)中的文字選中操作控件UITextView用法講解

    這篇文章主要介紹了iOS應(yīng)用開發(fā)中的文字選中操作控件UITextView用法講解,代碼基于傳統(tǒng)的Objective-C語言,需要的朋友可以參考下
    2016-02-02
  • IOS 指紋識別兩種方式詳解及實例

    IOS 指紋識別兩種方式詳解及實例

    這篇文章主要介紹了IOS 指紋識別兩種方式詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 詳解iOS游戲開發(fā)中Cocos2D的坐標(biāo)位置關(guān)系

    詳解iOS游戲開發(fā)中Cocos2D的坐標(biāo)位置關(guān)系

    這篇文章主要介紹了iOS游戲開發(fā)中Cocos2D的坐標(biāo)位置關(guān)系,Cocos2D是專門用來開發(fā)iOS游戲的開源框架,文中示例代碼采用Objective-C語言,需要的朋友可以參考下
    2016-02-02
  • 利用iOS繪制圖片生成隨機驗證碼示例代碼

    利用iOS繪制圖片生成隨機驗證碼示例代碼

    驗證碼的功能一般是防止使用程序惡意注冊、暴力破解或批量發(fā)帖而設(shè)置的。所謂驗證碼,就是將一串隨機產(chǎn)生的數(shù)字或符號,生成一幅圖片,圖片里加上一些干擾象素(防止OCR),圖片驗證碼相信大家都見到過,這篇文章用示例代碼給大家介紹iOS繪制圖片生成隨機驗證碼的方法。
    2016-11-11
  • iOS ScrollView嵌套tableView聯(lián)動滾動的思路與最佳實踐

    iOS ScrollView嵌套tableView聯(lián)動滾動的思路與最佳實踐

    這篇文章主要給大家介紹了關(guān)于ScrollView嵌套tableView聯(lián)動滾動的思路與最佳實踐,文中通過示例代碼介紹的非常詳細(xì),對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • iOS實現(xiàn)相冊多選圖片上傳功能

    iOS實現(xiàn)相冊多選圖片上傳功能

    這篇文章主要為大家詳細(xì)介紹了iOS實現(xiàn)相冊多選圖片上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • iOS實現(xiàn)自定義表單實例代碼

    iOS實現(xiàn)自定義表單實例代碼

    表單對大家來說應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于iOS如何實現(xiàn)自定義表單的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04

最新評論