Android 使用前臺服務

童思宇發表於2018-02-07

本篇文章還是在Android 活動和服務進行通訊的基礎上進行修改,服務幾乎都是在後臺執行的,一直以來它都是默默地做著辛苦的工作,但是服務的系統優先順序還是比較低的,當系統出現記憶體不足的情況下,就有可能會回收掉正在後臺執行的服務,如果你希望服務可以一直保持執行狀態,而不會由於系統記憶體不足的原因導致被回收,就可以考慮使用前臺服務,前臺服務和普通服務最大的區別就在於,它會一直有一個正在執行的圖示在系統的狀態列顯示,下拉狀態列可以看到更加詳細的資訊,非常類似於通知的效果,當然有時候你也可能不僅僅是為了防止服務被回收才使用前臺服務的,有些專案由於特殊的需求會要求必須使用前臺服務.

那麼我們就來看一下如何才能建立一個前臺服務吧,其實並不複雜,修改MyService中的程式碼,如下:

public class MyService extends Service {

    ...

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "onCreate: executed");
        Intent intent = new Intent(this,MainActivity.class);
        PendingIntent pi = PendingIntent.getActivity(this,0,intent,0);
        Notification notification = new NotificationCompat.Builder(this)
                .setContentTitle("This is content title")
                .setContentText("This is content text")
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.mipmap.ic_launcher)
                .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
                .setContentIntent(pi)
                .build();
        startForeground(1,notification);
    }

   ...
}
可以看到,這裡只是修改了onCreate()方法中的程式碼,在構建出了Notification物件後,呼叫了startForeground()方法,這個方法接收兩個引數,第一個引數是通知的id,第二個引數則是構建出的Notification物件,呼叫startForeground()方法後就會讓MyService變成一個前臺服務,並在系統狀態列顯示出來.

現在重新執行一下程式,並點選Start Service或Bind Service按鈕,MyService就會以前臺服務的模式啟動了.並且在系統狀態列會顯示一個通知圖示,下拉狀態列後可以看到該通知的詳細內容,如圖:

前臺服務的用法就是這個簡單.


相關文章