创建一个IntentService
,然后将for loop
放入onHandleIntent
方法中。每当我关闭应用程序时(从最近的不闭合中删除)都会停止。但是onDestroy
没有打电话。我还尝试了不同的设备。我不认为这是记忆力低的问题。
因此,服务仅在应用程序位于前景时才使用?
我必须在主线程的背景中执行一些任务当用户关闭应用程序时,服务即将接近。
这是我的示例代码
public class MyIntentService extends IntentService {
private static final String TAG = "MyIntentService";
public MyIntentService() {
super("MyIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
for (int i = 0; i < 30; i++) {
Log.d(TAG, "onHandleIntent: " + i);
try {
Thread.sleep(600);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
}
refs:即使关闭应用程序,如何保持IntentService运行?
在应用程序关闭上重新启动服务-START_STICKY
在关闭应用程序之后使用以下代码进行重新启动服务
public class MyService extends Service {
@Override
public int onStartCommand(final Intent intent, final int flags,
final int startId) {
super.onStartCommand(intent, flags, startId);
return Service.START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
Intent restartService = new Intent(getApplicationContext(),
this.getClass());
restartService.setPackage(getPackageName());
PendingIntent restartServicePI = PendingIntent.getService(
getApplicationContext(), 1, restartService,
PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 100, restartServicePI);
Toast.makeText(this, "onTaskRemoved", Toast.LENGTH_SHORT).show();
super.onTaskRemoved(rootIntent);
}}
上面的方法OnTaskRemped在100 mili秒后重新启动您的服务。
@Override
public void onTaskRemoved(Intent rootIntent) {
}
从最近删除应用程序时,将调用上述方法。但是没有上下文。因此,您需要在可用上下文时完成任务。因此,将代码放入其中,
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//do your operations
return START_REDELIVER_INTENT;
}
请记住在OnstartCommand内部您应该返回start_redeliver_intent或start_sticky。您可以从这里获得区别。
还有一件事,只有从您的代码任何地方调用starterVice一次。
因此,通过调用
来运行服务 startService(new Intent(context, serviceName.class));
遵循上述代码(如果不停止服务)将定期撤销。