我本身写的一个抽象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 不到第二次运行的代码.纯属猜想, 若是有高手偶然看见这个问题, 指点下.继承