Android getActivity()為空的問題解決辦法
Android getActivity()為空的問題解決辦法
在開發(fā)項目中有時會碰到getActivity函數(shù)為空的情況, 導(dǎo)致apk空指針崩潰問題, 看代碼邏輯沒有明顯的原因。
如果看Activity.Java、FragmentActivity.java的源碼就可以找到原因。 當(dāng)activity實例在后臺時, 系統(tǒng)在回收資源時很可能回收掉Activity, 并在onSaveInstanceState函數(shù)里保存fragment的狀態(tài), 再次打開該Activity時, 在onCreate方法里取出bundle里的fragment狀態(tài), 但這時fragment對應(yīng)的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函數(shù), 不保存到bundle; 2、 覆蓋onCreate方法, 刪除FRAGMENTS_TAG參數(shù)。(注意:Activity和FragmentActivity對FRAGMENTS_TAG的定義不同)
例如:
public class TestActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
if (savedInstanceState != null) {
savedInstanceState.remove("android:support:fragments"); //注意:基類是Activity時參數(shù)為android:fragments, 一定要在super.onCreate函數(shù)前執(zhí)行?。?!
}
super.onCreate(savedInstanceState);
...
}
//或者
protected void onSaveInstanceState(Bundle outState) {
//super.onSaveInstanceState(outState); //注釋掉該方法, 即不保存狀態(tài)
}
以上就是Android getActivity()為空的問題解決辦法的講解,如有疑問請大家留言或到本站社區(qū)討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Android中控制和禁止ScrollView自動滑動到底部的方法
這篇文章主要給大家介紹了關(guān)于Android中控制和禁止ScrollView自動滑動到底部的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10
快速解決設(shè)置Android 23.0以上版本對SD卡的讀寫權(quán)限無效的問題
今天小編就為大家分享一篇快速解決設(shè)置Android 23.0以上版本對SD卡的讀寫權(quán)限無效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
android listview 水平滾動和垂直滾動的小例子
android listview 水平滾動和垂直滾動的小例子,需要的朋友可以參考一下2013-05-05
Android 中動態(tài)加載.jar的實現(xiàn)步驟
本文介紹動態(tài)加載 .jar的實現(xiàn)步驟,這將對你的android開發(fā)很有幫助,剛興趣的朋友可以了解下哦2013-01-01
Android基礎(chǔ)知識之broadcast廣播詳解
這篇文章主要為大家詳細(xì)介紹了Android基礎(chǔ)知識之broadcast廣播的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-06-06

