你的位置:首页 > 操作系统

[操作系统]Android_实用技术(3)—— Service简析(Ⅲ)


  今天我们来分析Service中的一个小技巧:前台服务(Forground Service)

----------------------------------------------------------------------------------------------------------------------------------------

【问题】我们都知道服务是运行在后台的,如果系统出现内存不足的情况,那么此时,系统就可能回收后代的服务,那么我们如何保证服务可以一直运行?

【解决】:在服务中,有一个前台服务的概念,调用startForground()方法。

   我们看看官网对前台服务及startForeground的描述:

  

    

  我们来看看如何使用,看代码:

public class MyService extends Service{  ......

  @Override
  public void onCreate() {
    super.onCreate();
    Intent intent = new Intent(getBaseContext(), MainActivity.class);
    PendingIntent pi = PendingIntent.getActivity(getBaseContext(), 0 , intent, PendingIntent.FLAG_CANCEL_CURRENT);
    Notification no = new Notification.Builder(getBaseContext())
        .setWhen(System.currentTimeMillis())
        .setSmallIcon(R.mipmap.ic_launcher)
        .setTicker("Create a front desk Service!")
        .setContentTitle("This is a front desk service")
        .setContentText("A service skill!!!")
        .setContentIntent(pi)
        .setAutoCancel(true)
        .setDefaults(Notification.DEFAULT_ALL)
        .build();
    startForeground(1, no);
    Log.d(TAG, "onCreate executed");
  }
}

  再看一下官方文档:

  

  以上的代码是在Service的创建中添加了一个Notification,调用startForground()就可以保证:只要服务一直存在,那么在前台就会一直显示这个Notification提醒。

  如果我们在onDestroy()中调用stopForground()方法,会销毁这个Notification,但是Service还是存活的,此时Service就会面临被System干掉的风险。

  如果直接STOP SERVICE,那么Notification和Service都会销毁。 

----------------------------------------------------------------------------------------------------------------------------------------