国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android getActivity()為空的問題解決辦法

2019-12-12 02:25:55
字體:
來源:轉載
供稿:網友

Android getActivity()為空的問題解決辦法

  在開發項目中有時會碰到getActivity函數為空的情況,    導致apk空指針崩潰問題,  看代碼邏輯沒有明顯的原因。

       如果看Activity.Java、FragmentActivity.java的源碼就可以找到原因。 當activity實例在后臺時, 系統在回收資源時很可能回收掉Activity,  并在onSaveInstanceState函數里保存fragment的狀態, 再次打開該Activity時, 在onCreate方法里取出bundle里的fragment狀態, 但這時fragment對應的Activity早就不在了, 所以getActivity為空。

摘自FragmentActivity.java:       

 protected void onCreate(Bundle savedInstanceState) {         .......         if (savedInstanceState != null) {             Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG);             mFragments.restoreAllState(p, nc != null ? nc.fragments : null);         }         mFragments.dispatchCreate();     }     protected void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        Parcelable p = mFragments.saveAllState();       if (p != null) {          outState.putParcelable(FRAGMENTS_TAG, p);        }     }

從源碼可以看出解決方案: 1、  覆蓋onSaveInstanceState函數, 不保存到bundle; 2、  覆蓋onCreate方法, 刪除FRAGMENTS_TAG參數。(注意:Activity和FragmentActivity對FRAGMENTS_TAG的定義不同

     例如: 

public class TestActivity extends FragmentActivity {            @Override       protected void onCreate(Bundle savedInstanceState) {           if (savedInstanceState != null) {               savedInstanceState.remove("android:support:fragments");  //注意:基類是Activity時參數為android:fragments, 一定要在super.onCreate函數前執行!!!           }           super.onCreate(savedInstanceState);          ...       }       //或者       protected void onSaveInstanceState(Bundle outState) {           //super.onSaveInstanceState(outState);  //注釋掉該方法, 即不保存狀態       }   

以上就是Android getActivity()為空的問題解決辦法的講解,如有疑問請大家留言或到本站社區討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄梅县| 台南县| 久治县| 柳河县| 饶阳县| 古浪县| 游戏| 河池市| 通城县| 中方县| 葵青区| 盐边县| 岳普湖县| 大姚县| 苏尼特右旗| 阳新县| 廉江市| 吴川市| 云和县| 多伦县| 登封市| 铜陵市| 繁峙县| 赞皇县| 神木县| 南华县| 扬中市| 来宾市| 锦屏县| 甘南县| 得荣县| 黄大仙区| 祁门县| 祁阳县| 沙湾县| 富川| 常宁市| 洛南县| 连山| 二手房| 昌乐县|