首页 > 解决方案 > 如何调用服务的 OnDestroy() 或 OnTaskRemoved() 方法

问题描述

我在使用服务时遇到问题。

我正在尝试使用永久运行的后台服务。我已经用AlarmManager. OnDestroy()所以当应用程序关闭时,然后在服务的方法中发送广播。并在报警接收器中,可以启动服务。

 @Override
 public int onStartCommand(Intent intent, int flags, int startId) 
 {

    serviceInstance = this;
    callHelper = new CallHelper(this);

    callHelper.start();

    return START_STICKY;
}    

@Override
public void onDestroy() {
    Log.d("1111111111", "stop service");
    super.onDestroy();
    setAlarmTimer();
}

@Override
public void onTaskRemoved(Intent rootIntent) {
    Log.d("1111111111", "stop remove");
    super.onTaskRemoved(rootIntent);
}

protected void setAlarmTimer() {
    final Calendar c = Calendar.getInstance();
    c.setTimeInMillis(System.currentTimeMillis());
    c.add(Calendar.SECOND, 1);
    Intent intent = new Intent(this, AlarmReceiver.class);
    PendingIntent sender = PendingIntent.getBroadcast(this, 0,intent,0);

    AlarmManager mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    mAlarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), sender);
}

但是,如果我从最近的应用程序列表中删除(滑动)该应用程序,则不会调用服务的 OnDestroy() 或 OnTaskRemoved。所以不能调用AlarmManager。

以下是我的 Manifest.xml:

<service
    android:name=".service.CallTrackService"
    android:enabled="true"
    android:exported="true"
    android:stopWithTask="false"/>   

从最近的应用列表中删除应用时如何调用服务OnDestory()或方法?OnTaskRemoved()

任何知道这个问题的人都请提供解决方案。

标签: androidservicebackground-serviceforeground-service

解决方案


Service 类有一个onTaskRemoved()方法,当应用程序从最近的应用程序中删除时触发。

服务可以在此处调用stopSelf()以自行关闭。

如:

@Override
public void onTaskRemoved(Intent rootIntent) {
    super.onTaskRemoved(rootIntent);
    stopSelf();
}

编辑

在 android Oreo 中,以这种方式启动您的服务:

startForegroundService(new Intent(context, your_service.class));

推荐阅读