Android Service的理論探討與實踐(三)前台服務


前言

 過了個新年,繼續這系列博客的書寫

正文

 1.為什么需要前台服務?

一般情況下,Service在后台運行,默默無聞的做着自己的工作。但是在后台運行的Service,其優先級別較低,在系統資源不做,比如內存不夠或者手機長時間息屏的情況下,后台服務會被殺死。在這種情況下就不能服務運行的長期性,而前台服務則彌補了這不足,把服務設置成前台服務之后,服務的優先級就提高了,當內存不足的時候,不會被系統回收處理掉。

2.怎么設置服務為前台服務

 在服務開啟或者綁定時調用startForeground()就可以把服務設置成前台服務,這個方法需要兩個參數,一個是唯一id,另外一個參數是這個id對應的一個notification。具體代碼快如下

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 創建點擊跳轉Intent
Intent resultIntent = new Intent(this, OtherActivity.class);

    PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(),0,resultIntent,0);

    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(this)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle("前台服務標題")
                    .setContentText("前台服務內容")
                    .setContentIntent(pendingIntent);

    Notification notification = mBuilder.build();

    startForeground(110,notification);
    return START_REDELIVER_INTENT;
}

 如上,在onStartCommand()方法中調用startForeground(),然后該服務就變成了前台服務這里寫圖片描述

 注意,startForeground第一個參數一定不能為0,否則,通知欄不會顯示,在這里卡了好一會兒,看官方文檔才知道有這個要求:The integer ID you give to startForeground() must not be 0.
 如果想把當前服務退出前台服務狀態,可以調用stopForegound(),該方法接受一個boolean參數,代表是否去除通知欄,這個方法不會停止服務,如果直接殺死服務,那么相應的通知欄也會消失。

 小結,前台服務和普通服務的區別

前台Service的系統優先級更高、不易被回收;
前台Service會一直有一個正在運行的圖標在系統的狀態欄顯示,下拉狀態欄后可以看到更加詳細的信息,非常類似於通知的效果。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com