关闭应用程序后,Android Service停止



创建一个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));

遵循上述代码(如果不停止服务)将定期撤销。

相关内容

  • 没有找到相关文章

最新更新