如何在被"高级任务杀手"等应用程序杀死后重启服务?

use*_*716 11 service android restart

我有一个"扩展服务"的公共类,这个服务是使用startService(...)从一个活动启动的.但是在我使用高级任务杀手之后,该服务被终止并且再也没有重新启动.

我注意到一些应用程序,比如Facebook Messenger Android应用程序,即使在从高级任务杀手杀死它们后也会自动重启... facebook/twitter应用程序是如何做到的?

在此输入图像描述

Car*_*les 12

Android系统或用户可以随时终止服务.因此,如果要确保始终运行某些内容,可以通过AlarmManager类安排定期重新启动.以下代码演示了如何执行此操作.

Calendar cal = Calendar.getInstance();

Intent intent = new Intent(this, MyService.class);
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0);

AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
// Start every minute
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 60*1000, pintent); 
Run Code Online (Sandbox Code Playgroud)

您可以在用户启动应用程序时运行此代码(即在第一个活动的oncreate中),但是您必须检查它是否已经完成,因此如果您创建广播接收器可能会比在此处启动此代码更好系统重启.


GDr*_*oid 10

如果要在被其他进程杀死后自动重新启动服务,可以在服务中使用以下常量,

@Override
public int onStartCommand(Intent intent, int flags, int startId) { 
    return START_STICKY;
}
Run Code Online (Sandbox Code Playgroud)

您可以在以下位置找到有关START_STICKY和START_NON_STICKY的更多信息,

START_STICKY和START_NOT_STICKY

另外,请提供您的代码以获得更具体的答案.