1. 程式人生 > >Android中Service中是否能做耗時操作,兩種啟動模式與服務不被殺死的方法

Android中Service中是否能做耗時操作,兩種啟動模式與服務不被殺死的方法

1.在Service中,一般情況下都是不能在Service中耗時操作的,但是可以在mainifest中設定屬性progress,這樣我們就可以做耗時操作了。

2.Service的兩種啟動模式:

第一種是startService:startService的啟動模式由於沒有和Activity進行繫結,所以可以在後臺長期執行,但是不能呼叫服務裡的方法,用這種方式啟動Service的生命週期為  onCreate() onStartCommand(),onDestroy();在第一次啟動之後如果沒有執行stopService()方法,則再次呼叫startService()方法的時候,不會再走onCreate()方法,而是直接就進行執行onStartCommand()的方法。

第二種是bindService:bindSercive的啟動模式是與Activity進行繫結的,所以它不可以長期在後臺執行,因為當Activity進行銷燬的時候,就會停止服務,但是能呼叫服務力的方法。它的生命週期為,onCreate(),onBind(),onUnbind(),onDestroy(),而一個服務可以被多個客戶呼叫(指的是Activity),當所有客戶都呼叫onUnbind()方法的時候,才會銷燬服務。否者不會銷燬。

3.由於服務(Service)是在後臺執行的,所以是不可見的,所以有可能會被系統殺死。那麼怎樣可以讓服務不被系統殺死呢。

(1)可以把服務變成前臺程序,在我們啟動服務的時候,可以先執行startForeground()方法讓它變成前臺程序。在這種情況下確實可以減少被kill,但是還是不能保證完全不被殺死。

(2)可以通過廣播的形式,在onDestroyz()方法裡設定一條廣播,當服務被殺死的時候,通過廣播的形式再次喚醒服務。但是可能在使用第三方應用的時候強制了kill服務的話,onDestroy()方法還沒有執行,可能就被殺死。所以這個方法還是不能完全保證不能被殺死。

(3)可以通過雙Service()的方式來保護服務不被殺死。兩個服務相互之間進行判斷對方是否被殺死,如果殺死了就再次啟用執行。