我本身寫的一個抽象BaseActivity,讓其繼承FragmentActivity,java
繼承以後,會產生一個bug,ide
就是在一個子類的Activity 調用onDestroy方法裏, 會拋出異常,this
網上搜索這個bug產生的緣由,大部分解釋都是說, 是因爲Fragment嵌套Fragment產生的, 可是我這裏不是這個緣由啊,spa
通過一夜亂摸, 找到以下方法解決了這個問題: debug
@Override protected void onDestroy() { activityState = ACTIVITY_DESTROY; L.i(this, "---------onDestroy "); //用BaseActivity繼承FragmentActivity時會報一個異常, // java.lang.IllegalStateException : No activity //爲了不這個問題, 反射獲得父類FragmentActivity的一個成員mHandler, 移除掉其全部的消息隊列 try { java.lang.reflect.Field fHandler = FragmentActivity.class.getDeclaredField("mHandler"); fHandler.setAccessible(true); Handler handler = (Handler) fHandler.get(this); if(handler != null){ handler.removeCallbacksAndMessages(null); } } catch (NoSuchFieldException e) { throw new RuntimeException(e); } catch (IllegalAccessException e) { throw new RuntimeException(e); } super.onDestroy(); AppManager.getAppManager().finishActivity(this); }
可是這裏是什麼緣由產生這個問題的呢?code
一直沒法找到, 貌似是子類的onDestory()方法被調用了兩次, 第一次就將activity本身消滅了, 而後第二次消息隊列中還有消息,而後又執行一次, 就拋出 no Activity的異常了, 可是真的是這個緣由嗎? 我debug 不到第二次運行的代碼.純屬猜想, 若是有高手偶然看見這個問題, 指點下.繼承