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編程實現(xiàn)添加文本內(nèi)容到sqlite表中的方法
這篇文章主要介紹了android編程實現(xiàn)添加文本內(nèi)容到sqlite表中的方法,結(jié)合實例較為詳細(xì)的分析了Android針對txt文本文件的讀取及SQL數(shù)據(jù)庫操作的相關(guān)技巧,需要的朋友可以參考下2015-11-11詳解Retrofit Interceptor(攔截器) 攔截請求并做相關(guān)處理
本篇文章主要介紹了詳解Retrofit Interceptor(攔截器) 攔截請求并做相關(guān)處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04Android編程使用android-support-design實現(xiàn)MD風(fēng)格對話框功能示例
這篇文章主要介紹了Android編程使用android-support-design實現(xiàn)MD風(fēng)格對話框功能,涉及Android對話框、視圖、布局相關(guān)操作技巧,需要的朋友可以參考下2017-01-01Android性能優(yōu)化之Bitmap圖片優(yōu)化詳解
在Android項目的imageview中使用大圖bitmap時會占據(jù)很大的內(nèi)存,而且在很多時候我們并不需要顯示原圖那么大的圖片, 所以我們需要對圖片進(jìn)行優(yōu)化,這篇文章主要介紹了Android性能優(yōu)化之Bitmap圖片優(yōu)化的相關(guān)資料,需要的朋友們下面來一起看看吧。2017-04-04Android 通過騰訊TBS實現(xiàn)文件預(yù)覽功能
這篇文章主要介紹了Android 通過騰訊TBS實現(xiàn)文件預(yù)覽功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06Android內(nèi)存泄漏檢測工具LeakCanary
在Android的性能優(yōu)化中,內(nèi)存優(yōu)化是必不可少的點,而內(nèi)存優(yōu)化最重要的一點就是解決內(nèi)存泄漏的問題,在Android的內(nèi)存泄漏分析工具也不少,比如PC端的有:AndroidStudio自帶的Android?Profiler、MAT等工具;手機端也有,就是我們今天要介紹的LeakCanary2023-04-04