之前我們有篇關於介紹 Android 如何?開機自啟動,不過都寫的是關於如何啟動 Activity,本篇文章將介紹如何啟動 Service。
先附上之前文章的連結,以便參考:【Android】開機自啟動。
Service 的啟動相比 Acitivty 而言較為繁瑣,其實都是通過別的類去調用被啟動類,只不過可能 Activity 大家更為熟悉,Service 比較陌生吧。
不瞭解 Android Service 的童鞋可以先參考下【Android】Service 生命週期 和 【Android】Service學習之本地服務 兩篇文章。
下面回到正題,看看 Service 是如何?自啟動的。
和自啟動 Activity 一樣,我們也先需要靜態註冊一個廣播。
隨後,建立一個繼承於 BroadcastReveiver 的啟動類。
context.startService(new Intent("cn.etzmico.Etzmico_AutoRunService")); // 調用 Service
調用/啟動一個 Service 比 啟動一個 Activity 要容易的多。intent中的參數是一個“標籤”,詳情下面的內容會介紹到。
在 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 的參數)。
工程資源:http://download.csdn.net/detail/etzmico/4110913