2012-07-24 21 views
2

我在某處讀取廣播接收器在與應用程序不同的進程中運行,因此它有自己的堆。現在,如果在廣播接收機中,我從我的應用程序開始一個活動,這是否會在應用程序的進程中運行,還是仍在廣播接收器的進程中?從廣播接收器啓動的活動是否與應用程序使用相同的堆?

這個問題的答案對於本機堆(蜂窩前API)是否也適用?

想知道,因爲當我收到推送通知時,我必須啓動一個內存昂貴的活動/屏幕,並且如果我正處於某些其他內存昂貴活動的中間,應用程序中可能會導致內存不足錯誤。但是,如果它是一個單獨的堆(更具體地說 - 本地堆,因爲內存消耗來自位圖並且我正在爲API預蜂窩開發),所以我不必擔心它。

注「讀的地方」是指:Why so much memory? 尼古拉Chorniy的帖子

「有我用來避免的OutOfMemoryError一個棘手的解決辦法我註冊了一個接收器,使其運行在不同的過程...... 「

回答

2

我讀的地方,廣播接收器運行在單獨的進程比應用

默認情況下,所有組件都在相同的進程中運行。

奇怪,因爲我有,當我收到一個推送通知

用戶未必欣賞你在中間顯示「內存昂貴的活動/屏幕」啓動內存昂貴的活動/屏幕無處。

+0

我編輯了我的文章,閱讀http://stackoverflow.com/questions/4726129/why-so-much-memory - Nikolay Chorniy的帖子。那是錯的嗎?或者我理解錯了什麼? – Ixx 2012-07-24 22:05:47

+0

@lxx:在您引用的文章中,開發人員*特別*將他的'BroadcastReceiver'放在一個單獨的過程中。它不會自動發生。此外,用戶可能不會意識到您正在使用的額外內存及其對設備的影響。 Google員工多次表示,使用第二個流程對業務不利。 AFAIK,默認情況下,您的活動將回到您的常規流程中,除非您還安排它通過清單運行在第二個流程中,您對接收方的做法。 – CommonsWare 2012-07-24 22:12:02

+0

好吧,我明白了。感謝您的回答! – Ixx 2012-07-24 22:19:36

相關問題