当Android系统内存不足或出现其他问题时,系统可能会杀死后台运行的服务。要解决这个问题,可以采取以下方法:
startForeground()
方法将服务设置为前台服务,并在通知栏显示一个持续的通知。public class MyService extends Service {
private static final int NOTIFICATION_ID = 1;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 将服务设置为前台服务
startForeground(NOTIFICATION_ID, createNotification());
// ...
return START_STICKY;
}
private Notification createNotification() {
// 创建通知
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.icon)
.setContentTitle("My Service")
.setContentText("Running...");
return builder.build();
}
// ...
}
onStartCommand()
方法中返回START_STICKY
,这样系统会尝试重新启动服务,即使它被杀死。public class MyService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// ...
return START_STICKY;
}
// ...
}
public class MyJobService extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
// 启动服务
Intent serviceIntent = new Intent(getApplicationContext(), MyService.class);
startService(serviceIntent);
// 任务执行完成后需要调用jobFinished()方法
jobFinished(params, false);
return false;
}
@Override
public boolean onStopJob(JobParameters params) {
return false;
}
// ...
}
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 启动服务
Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);
}
}
public class MainActivity extends AppCompatActivity {
private static final long INTERVAL = 1000 * 60 * 15; // 15分钟
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 设置定时任务
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, MyBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), INTERVAL, pendingIntent);
}
// ...
}
通过以上方法,可以增加服务的存活时间,从而减少Android服务被杀死的概率。