创建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: ");
}
}
参考文献:How to keep an IntentService running even when app is closed? {
{3}}
答案 0 :(得分:1)
在关闭应用
后使用以下代码进行重启服务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);
}}
以上方法onTaskRemoved在100毫秒后重启您的服务。
答案 1 :(得分:0)
@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。你可以得到差异from here.
还有一件事,只有在代码的任何地方调用startService时,onStartCommand才会自动撤销。
因此,请致电
运行服务 startService(new Intent(context, serviceName.class));
如果服务没有停止,上面的代码onStartCommand将被定期撤销。