【Android】開機自啟動Service
之前我們有篇關於介紹 Android 如何實現開機自啟動,不過都寫的是關於如何啟動 Activity,本篇文章將介紹如何啟動 Service。
Service 的啟動相比 Acitivty 而言較為繁瑣,其實都是通過別的類去呼叫被啟動類,只不過可能 Activity 大家更為熟悉,Service 比較陌生吧。
下面回到正題,看看 Service 是如何實現自啟動的。
和自啟動 Activity 一樣,我們也先需要靜態註冊一個廣播。
隨後,建立一個繼承於 BroadcastReveiver 的啟動類。
呼叫/啟動一個 Service 比 啟動一個 Activity 要容易的多。intent中的引數是一個“標籤”,詳情下面的內容會介紹到。context.startService(new Intent("cn.etzmico.Etzmico_AutoRunService")); // 呼叫 Service
在 Manifest.xml 靜態註冊。
<receiver android:name="cn.etzmico.autorunservice.BootReceiver" > <intent-filter > <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </receiver>
同樣,需要加入許可權。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" >
</uses-permission>
下面就來看 Service 了。
建立一個繼承於 Service 的類。為了驗證,我們可以在 onCreate() 方法中,列印一句話。
這裡簡單的說下 Service 的生命週期。
Service 也有生命週期,也有 onCrate() 等……不過 Service 還有 onStart() 和 onBind() 。
onCreate() 和 onStart() 的區別是:
onCreate() 只有在首次呼叫 Service 時呼叫。
onStart()每次呼叫 Service 時均呼叫,首次呼叫 Service 時也不例外。
onBind() 在bindService() 時呼叫(本文不涉及)。
因此我們可以根據自己所需要的,在 onCreate() , onStart() 以及 onBind() 中寫入方法。
另外,Service 也是需要宣告的。
我們都知道,當新建 Activity 的時候,我們需要在 Manifest.xml 中宣告, Service 亦然如此,不過 Service 與之不同的是,每個 Service 都需要新增一個“標籤”,這個標籤在一個工程中要是唯一的,用於讓系統知道我們需要呼叫的是哪個 Service。
<service android:name="cn.etzmico.autorunservice.Etzmico_AutoRunService" >
<intent-filter >
<action android:name="cn.etzmico.Etzmico_AutoRunService" />
<category android:name="android.intent.category.default" />
</intent-filter>
</service>
intent-filter 的 actiong android:name 中的內容就是“標籤”了。如果我們想啟動的是這個 Service,那麼在廣播類中 startService() 方法中 intent 的引數就是這個“標籤”;否則啟動服務時會提示new Intent找不到"cn.etzmico.Etzmico_AutoRunService"(引號中具體內容視當時情況而定,即 startService() 時 intent 的引數)。