1. 程式人生 > >【Android】開機自啟動Service

【Android】開機自啟動Service

之前我們有篇關於介紹 Android 如何實現開機自啟動,不過都寫的是關於如何啟動 Activity,本篇文章將介紹如何啟動 Service。

Service 的啟動相比 Acitivty 而言較為繁瑣,其實都是通過別的類去呼叫被啟動類,只不過可能 Activity 大家更為熟悉,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 的引數)。