天天看點

Android開發中使用Service還是Thread?Android開發中使用Service還是Thread?首先來看看Android官網關于這個問題是怎麼說的:Should you use a service or a thread?總結:使用Service還是Thread?

Android開發中使用Service還是Thread?

首先來看看Android官網關于這個問題是怎麼說的:

Should you use a service or a thread?

A service is simply a component that can run in the background even when the user is not interacting with your application. Thus, you should create a service only if that is what you need.

If you need to perform work outside your main thread, but only while the user is interacting with your application, then you should probably instead create a new thread and not a service. For example, if you want to play some music, but only while your activity is running, you might create a thread in onCreate(), start running it in onStart(), then stop it in onStop(). Also consider using AsyncTask or HandlerThread, instead of the traditional Threadc lass. See the Processes and Threading document for more information about threads.

Remember that if you do use a service, it still runs in your application's main thread by default, so you should still create a new thread within the service if it performs intensive or blocking operations.

總結:使用Service還是Thread?

Service是一個簡單的元件,可以在背景運作,即使使用者沒有與您的應用程式互動。是以,你應該建立一個服務,如果這是你所需要的。如果你需要在主線程外執行工作,但隻有當使用者與應用程式互動時,你可能會建立一個新的線程,而不是服務。其實Service和Thread可以說沒有什麼關系,看看這篇文章怎麼說的,很有用,我們不是要考慮該用Thread或者該用Service,而是應該為Thread選擇合适的生命周期。摘錄如下:

首先,需要了解Service的幾個特點。

(1)預設情況下,Service其實是運作在主線程中的,如果需要執行複雜耗時的操作,必須在Service中再建立一個Thread來執行任務。

(2)Service的優先級高于背景挂起的Activity,當然,也高于Activity所建立的Thread,是以,系統可能在記憶體不足的時候優先殺死背景的Activity或者Thread,而不會輕易殺死Service元件,即使被迫殺死Service,也會在資源可用時重新開機被殺死的Service。

其實,Service和Thread根本就不是一個級别的東西,Service是系統的四大元件之一,Thread隻是一個用來執行背景任務的工具類,它可以在Activity中被建立,也可以在Service中被建立。是以,我們其實不應該讨論該使用Service還是Thread,而是應該讨論在什麼地方建立Thread。

典型的應用中,它可以在以下三個位置被建立,不同的位置,其生命周期不一樣,是以,我們應該根據該Thread的目标生命周期來決定是在Service中建立Thread還是在Activity中建立它。

(1)在Activity中被建立

這種情況下,一般在onCreate時建立,在onDestroy()中銷毀,否則,Activity銷毀後,Thread是會依然在背景運作着。

這種情況下,Thread的生命周期即為整個Activity的生命周期。是以,在Activity中建立的Thread隻适合完成一些依賴Activity本身有關的任務,比如定時更新一下Activity的控件狀态等。

核心特點:該Thread的就是為這個Activity服務的,完成這個特定的Activity交代的任務,主動通知該Activity一些消息和事件,Activity銷毀後,該Thread也沒有存活的意義了。

(2)在Application中被建立

這種情況下,一般自定義Application類,重載onCreate方法,并在其中建立Thread,當然,也會在onTerminate()方法中銷毀Thread,否則,如果Thread沒有退出的話,即使整個Application退出了,線程依然會在背景運作着。

這種情況下,Thread的生命周期即為整個Application的生命周期。是以,在Application中建立的Thread,可以執行一些整個應用級别的任務,比如定時檢查一下網絡連接配接狀态等等。

核心特點:該Thread的終極目标是為這個APP的各個Activity服務的,包括完成某個Activity交代的任務,主動通知某個Activity一些消息和事件等,APP退出之後該Thread也沒有存活的意義了。

以上這兩種情況下,Thread的生命周期都不應該超出整個應用程式的生命周期,也就是,整個APP退出之後,Thread都應該完全退出,這樣才不會出現記憶體洩漏或者僵屍線程。那麼,如果你希望整個APP都退出之後依然能運作該Thread,那麼就應該把Thread放到Service中去建立和啟動了。

(3)在Service中被建立

這是保證最長生命周期的Thread的唯一方式,隻要整個Service不退出,Thread就可以一直在背景執行,一般在Service的onCreate()中建立,在onDestroy()中銷毀。

是以,在Service中建立的Thread,适合長期執行一些獨立于APP的背景任務,比較常見的就是:在Service中保持與伺服器端的長連接配接。

核心特點:該Thread可以為APP提供一些“服務”或者“狀态查詢”,但該Thread并不需要主動通知APP任何事件,甚至不需要知道APP是誰。

總之,我們不是要考慮該用Thread或者該用Service,而是應該為Thread選擇合适的生命周期。