Fragment中使用ViewFlipper在严格模式下抛出

时间:2025-01-29 07:39:09

今天遇到一个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了。



相关文章