我自己写的一个抽象BaseActivity,让其继承FragmentActivity,
继承之后,会产生一个bug,
就是在一个子类的Activity 调用onDestroy方法里, 会抛出异常,
网上搜索这个bug产生的原因,大部分解释都是说, 是由于Fragment嵌套Fragment产生的, 但是我这里不是这个原因啊,
经过一晚上乱摸, 找到如下方法解决了这个问题:
@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); }
但是这里是什么原因产生这个问题的呢?
一直无法找到, 貌似是子类的onDestory()方法被调用了两次, 第一次就将activity自己消灭了, 然后第二次消息队列中还有消息,然后又执行一次, 就抛出 no Activity的异常了, 但是真的是这个原因吗? 我debug 不到第二次运行的代码.纯属猜测, 如果有高手偶然看见这个问题, 指点下.