2013-10-06 74 views
0

我在LogCat中收到以下錯誤當我註冊我的BroadcastReceiver程序。我知道我沒有在活動中取消註冊我的BroadcastReceiver。MainActivity泄漏IntentReceiver

但我沒有得到這個錯誤,當我通過艙單註冊。爲什麼??????

也是什麼意思MainActivity泄漏IntentReceiver? 。它會在內存中產生什麼問題。

如果我沒有取消註冊我的BroadcastReceiver會發生什麼?

10-06 18:09:38.057: E/ActivityThread(15435): Activity com.collabera.labs.sai.MainActivity 

has leaked IntentReceiver [email protected] that was 

originally registered here. Are you missing a call to unregisterReceiver()? 
+0

你停止你的活動不退訂的廣播接收器?檢查Android活動生命週期http://developer.android.com/reference/android/app/Activity.html – barto90

+0

是的。我故意停止了我的活動,但未取消訂閱BroadcastReceiver。我想知道如果我沒有取消註冊,而是在LogCat中獲取錯誤,會發生什麼情況。 – saravanan

回答

0

當對象存儲在內存中時發生內存泄漏,但無法訪問,因爲指向對象的指針被刪除。它會降低性能,因爲它會佔用內存,最糟糕的情況是系統會崩潰。

由於Android正在運行Java,因此垃圾收集器應該處理它,但它當然更傾向於正確處理它,而不是將其留給GC。

以下是有關內存泄漏的一些信息:

Wikipedia - Memory leaks

Android - Avoiding memory leaks

+0

「因爲指向該對象的指針被刪除」。如果沒有指針(引用)到一個對象。它將有資格進行垃圾回收。所以我們安全嗎? – saravanan

+0

不。IntentReceiver是在某處註冊的,它會有一個指向該對象的指針。 – RvdK

+0

是的,在這種情況下它被註冊到Mainactivity,但是當它被銷燬時,指針也會被銷燬。 – barto90

相關問題