最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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、ServiceActivity都擁有上下文,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通過逆向理解Block的內(nèi)存模型

    iOS通過逆向理解Block的內(nèi)存模型

    自從對 iOS 的逆向初窺門徑后,我也經(jīng)常通過它來分析一些比較大的應(yīng)用,參考一下這些應(yīng)用中某些功能的實現(xiàn)。這個探索的過程樂趣多多,不僅能滿足自己對未知的好奇心,還經(jīng)常能發(fā)現(xiàn)一些意外的驚喜。這篇文章主要介紹了iOS通過逆向如何深入理解Block內(nèi)存模型的相關(guān)資料。
    2017-01-01
  • iOS中視頻播放的基本方法總結(jié)

    iOS中視頻播放的基本方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于iOS中視頻播放的基本方法的相關(guān)資料,文中分別介紹了MPMoviePlayerController、MPMoviePlayerViewController、AVPlayer以及AVPlayerViewController四種方法,需要的朋友可以參考下
    2018-07-07
  • iOS仿微博圖片瀏覽器

    iOS仿微博圖片瀏覽器

    這篇文章主要為大家詳細介紹了iOS仿微博圖片瀏覽器的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • iOS UISearchController的使用方法

    iOS UISearchController的使用方法

    本文主要介紹了iOS UISearchController的使用方法,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Xcode使用教程詳細講解(全)

    Xcode使用教程詳細講解(全)

    本文介紹的是Xcode使用教程詳細講解,Xcode是一個款強大的IDE開發(fā)環(huán)境,就像你在寫Windows程序時需要VS2005一樣 需要要Xcode為你寫Mac程序提供環(huán)境
    2015-07-07
  • iOS遠程推送Push開發(fā)教程

    iOS遠程推送Push開發(fā)教程

    這篇文章主要為大家詳細介紹了iOS遠程推送Push開發(fā)教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • iOS仿抖音視頻加載動畫效果的實現(xiàn)方法

    iOS仿抖音視頻加載動畫效果的實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于iOS視頻加載動畫效果的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • iOS實現(xiàn)文字轉(zhuǎn)化成彩色文字圖片

    iOS實現(xiàn)文字轉(zhuǎn)化成彩色文字圖片

    這篇文章主要為大家詳細介紹了iOS文字轉(zhuǎn)化成彩色文字圖片的實現(xiàn)方法,可以實現(xiàn)不同字體,漸變的效果,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 詳解IOS 單例的兩種方式

    詳解IOS 單例的兩種方式

    這篇文章主要介紹了詳解IOS 單例的兩種方式的相關(guān)資料,希望通過本文大家能夠理解掌握IOS 的兩種單例的使用方法,需要的朋友可以參考下
    2017-09-09
  • iOS獲取本地音頻文件(屬性/信息)

    iOS獲取本地音頻文件(屬性/信息)

    這篇文章主要為大家詳細介紹了iOS獲取本地音頻文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07

最新評論

伊通| 改则县| 沙坪坝区| 泾川县| 南昌市| 黎城县| 宕昌县| 惠来县| 沈丘县| 遵化市| 定州市| 家居| 泽库县| 阳山县| 双辽市| 林周县| 北碚区| 秦安县| 林西县| 进贤县| 宁都县| 石景山区| 柳州市| 仪陇县| 邹平县| 天柱县| 平舆县| 台安县| 尚义县| 三穗县| 宾阳县| 红河县| 灌云县| 沙雅县| 云梦县| 福鼎市| 合阳县| 胶南市| 金塔县| 菏泽市| 三门峡市|