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

首頁 > 系統 > Android > 正文

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

2019-10-22 18:31:52
字體:
來源:轉載
供稿:網友

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()為空的問題解決辦法的講解,如有疑問請大家留言或到本站社區討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武义县| 理塘县| 祁阳县| 营山县| 大姚县| 新绛县| 普兰店市| 平果县| 昌江| 广水市| 平凉市| 永川市| 霍林郭勒市| 武宁县| 贞丰县| 靖西县| 阜南县| 泾源县| 平湖市| 华亭县| 江源县| 当阳市| 阿克陶县| 来安县| 株洲县| 田阳县| 长沙市| 无为县| 闸北区| 水城县| 靖宇县| 同心县| 华池县| 琼结县| 金门县| 长治县| 深圳市| 丹寨县| 礼泉县| 贡嘎县| 礼泉县|