如何调用服务的OnDestroy()或OnTaskRemoved()方法

时间:2019-05-23 02:27:50

标签: android service background-service foreground-service

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

我正在尝试将后台服务用于永久运行。我已经用var resultado; function num_2(repet){ for (var i = 0; i > repet-1; i++) { if (i>=1) { return i + ", "; }else{ return i; } } } function sumarr(a,b,c){ if (a!="" && a!=null) { resultado = a+b+c; return "\n" + "resul: " + resultado + '\n' + "1: " + a + '\n' + "2: " + b + '\n' + "3: " + c + '\n' + '\n'; }else{ return "noting"; } } console.log("\n" + "callback 2: " + sumarr(num_2(3)));实现了。因此,当应用关闭时,将以服务的AlarmManager方法发送广播。并且在警报接收器中,可以开始服务。

OnDestroy()

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

以下是我的Manifest.xml:

 @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);
}

从最近的应用列表中删除应用时,如何调用服务的<service android:name=".service.CallTrackService" android:enabled="true" android:exported="true" android:stopWithTask="false"/> OnDestory()方法?

任何知道此问题的人,然后请提供解决方案。

2 个答案:

答案 0 :(得分:0)

你不知道。该框架可以。当不再绑定任何绑定服务时,该绑定服务将被销毁。当启动的服务明确停止或系统需要资源时,该服务将被销毁。要显式停止服务,请从任何上下文调用stopService,或从服务调用stopSelf。

但是“我正在尝试将后台服务永久使用。”。在现代Android中无法实现。系统将清理您的资源。没有办法使其永久运行,甚至无法通过警报伪造永久运行。无论您希望服务实际执行什么操作,都需要找到另一种方法。

答案 1 :(得分:0)

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

服务可以在那里呼叫stopSelf()来自行关闭。

如:

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

修改

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

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