2012-10-13 114 views
0

剛剛看到谷歌I/O 2010 - 它被聲稱Android REST客戶端應用程序: 開始長從服務 而且據我瞭解正在運行的操作(我的英語很差) 的這樣做的主要目的是防止應用程序被系統殺死。對? 它是很好的做法,從服務執行所有長期運行的操作,不僅網絡的呢?單獨的線程VS SERVICE +單獨的線程

據我瞭解,如果我在活動中創建一個對象,然後應用程序進程將被殺死,我將失去這個對象,但如果我在一個服務中創建這個對象,並且後續進程將被殺死 - 我的對象仍然活着。對?

(單獨的線程)VS(SERVICE +單獨的線程)

什麼是我的問題的情況下有什麼不同?

+0

沒有人對這個主題感興趣? – pvllnspk

回答

0

1.在Android上的服務API是應用程序做的工作在後臺的主要機制之一。

但它可以很容易地使用簡單的線程來實現。

但是: * 一旦應用程序不再是人們普遍認爲消耗用戶和候選人可見由系統如果它需要在其他地方的內存被殺死。應用程序解決這個問題的主要方式是啓動一個Service組件,該組件明確告訴系統他們正在做一些有價值的工作,並且如果系統不真正需要,他們寧願系統不會殺死他們的進程。 *

所以據我所知,這是一個普通的線程和我們的情況下的服務之間的區別。

2

不完全是......

您somewhow混合銷燬 這是東西,你的應用程序應該做好應對的概念DestroyedKilled

。對於可能在不同的原因(即設備方向的變化,和其他)操作系統可能會破壞你的活動(通常叫onDestroy()提前,讓你有機會救什麼是重要的),並且在活動中的所有對象都將丟失。然而,你的應用程序可能包含一個以上的activitiy和/或服務,以及有一個活動被破壞,並不意味着其他人將被estroyed爲好。

死亡 操作系統可能會因爲某種原因決定殺死您的應用程序。這是通過殺死應用程序使用的進程來完成的,這是運行組成應用程序的所有活動和服務的過程。您的應用程序將不會有任何警告,並且無法阻止此操作。您的所有應用程序中的所有對象(由活動和服務使用)都將丟失。

話雖如此,在whats's長時間運行的活動Service的優勢在哪裏?

讓我們用一個簡單的例子:

如果你的活動是在大型文件上載到服務器的midle,用戶決定改變設備的方向,該活動將被銷燬,上傳中斷。即使在活動重新啓動時重新啓動上傳,它也會從開始再次開始。

如果你有一個服務從活動根據要求做上傳東西,即使你的活動destroyd,服務保持工作狀態,上傳繼續而不imterruption。

注: 如果你有一個很長的正在運行的服務(將要運行更多然後一個半小時),然後讓它爲foregroung服務,否則將會被殺死反正。

+0

如果一個活動被破壞,單獨的線程會被殺死嗎?不,我想。 所以我仍然沒有得到我主要問題的答案。 – pvllnspk

+0

SEPARATE THREAD VS SERVICE + SEPARATE THREAD – pvllnspk

+0

如果您在活動中創建線程,則應在活動結束時終止線程,或者您需要使用'onRetainNonConfigurationInstance()'將其重新註釋到新活動中,if一個將被創建。否則,您將擁有一個orfan線程,您不能再控制或通信。 – Luis