- 直接切入主題。出現這個問題后,我們定位到代碼中的位置一般是getString或者getResources導致的!
- 既然是Fragment出現的問題。我們直接定位到Fragment的源代碼,檢索錯誤的字符串,馬上我們可以看到Fragment的getResources()方法(getString最終也會調用這個方法),如下
/** * Return <code>getActivity().getResources()</code>. */ final public Resources getResources() { if (mHost == null) { throw new IllegalStateException("Fragment " + this + " not attached to Activity"); } return mHost.getContext().getResources(); }
- 從上面的代碼中我們可以明白,拋出異常的原因是mHost == null,而這個mHost會在Fragment被回收后置為null(詳細的細節可以查看FragmentManager這個類),出現這種狀況是由於我們退出當前Fragment后某個線程還調用getString等方法
- 所以如果Fragment被回收后我們再調用這個方法,就會拋出這個異常
解決方案:
1.錯誤已經和明顯的指出not attached to Activity了,所以我們在調用getString等方法前需要判斷一下Fragment是否已經add到Activity中(通過Fragment的isAdded方法)
2.直接在Fragment創建的時候通過getActivity獲取Activity上下文對象賦值給成員變量,后面直接用即可
作者:android_cyw
鏈接:https://www.jianshu.com/p/a8af13abe405
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。