今天遇到一个bug:IntentReceiverLeaked, 是在严格模式下报的:
12-20 01:04:17.503 E/StrictMode(14464): : Activity has leaked IntentReceiver $1@42b37fc0 that was originally registered here. Are you missing a call to unregisterReceiver()?
12-20 01:04:17.503 E/StrictMode(14464): at $ReceiverDispatcher.<init>(:818)
12-20 01:04:17.503 E/StrictMode(14464): at (:603)
12-20 01:04:17.503 E/StrictMode(14464): at (:1404)
12-20 01:04:17.503 E/StrictMode(14464): at (:1384)
12-20 01:04:17.503 E/StrictMode(14464): at (:1378)
12-20 01:04:17.503 E/StrictMode(14464): at (:446)
12-20 01:04:17.503 E/StrictMode(14464): at (:93)
12-20 01:04:17.503 E/StrictMode(14464): at (:12125)
12-20 01:04:17.503 E/StrictMode(14464): at (:2453)
12-20 01:04:17.503 E/StrictMode(14464): at (:2460)
12-20 01:04:17.503 E/StrictMode(14464): at (:2460)
12-20 01:04:17.503 E/StrictMode(14464): at (:3548)
12-20 01:04:17.503 E/StrictMode(14464): at (:3380)
12-20 01:04:17.503 E/StrictMode(14464): at (:3325)
12-20 01:04:17.503 E/StrictMode(14464): at (:3301)
12-20 01:04:17.503 E/StrictMode(14464): at .(:922)
12-20 01:04:17.503 E/StrictMode(14464): at .(:1088)
12-20 01:04:17.503 E/StrictMode(14464): at .(:682)
12-20 01:04:17.503 E/StrictMode(14464): at .(:1444)
12-20 01:04:17.503 E/StrictMode(14464): at .$(:429)
12-20 01:04:17.503 E/StrictMode(14464): at (:730)
12-20 01:04:17.503 E/StrictMode(14464): at (:92)
12-20 01:04:17.503 E/StrictMode(14464): at (:137)
12-20 01:04:17.503 E/StrictMode(14464): at (:5265)
12-20 01:04:17.503 E/StrictMode(14464): at (Native Method)
12-20 01:04:17.503 E/StrictMode(14464): at (:525)
12-20 01:04:17.503 E/StrictMode(14464): at $(:760)
12-20 01:04:17.503 E/StrictMode(14464): at (:576)
12-20 01:04:17.503 E/StrictMode(14464): at (Native Method)
开始以为是Activity中的BroadcastReceiver没有调用unregisterReceiver,排查了代码发现都正常调用了。那应该是其他的问题了, 我试着检索了ViewFlipper,发现DetailActivity中有个Fragment用到了ViewFlipper, 网上查了下资料:
(/)
大多是说重载onDetachedFromWindow,并在其中加入stopFlipping;或许我的情况与之不同,依然无效;
解决:重载Activity的onDetachedFromWindow在其中加入
if(mViewFlipper != null){
mViewFlipper .onDetachedFromWindow();
}
即可
由于我使用的是Fragment, 后来在重载Fragment的onDetach:
@Override
public void onDetach() {
();
if(viewFlipper!=null){
//防止
();
}
}
发现OK了。