android - 如何调用服务的 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()
任何知道这个问题的人都请提供解决方案。
解决方案
Service 类有一个onTaskRemoved()
方法,当应用程序从最近的应用程序中删除时触发。
服务可以在此处调用stopSelf()
以自行关闭。
如:
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
stopSelf();
}
编辑
在 android Oreo 中,以这种方式启动您的服务:
startForegroundService(new Intent(context, your_service.class));
推荐阅读
- azure - 部署的 Azure 烧瓶应用始终显示默认登录页面
- java - Firebase 实时数据库删除前 20 个项目
- angular - 获取选择选项属性值反应形式
- perl - 更改 AgentTicketZoom OTRS6 中的客户信息字段
- java - Cql 时间数据类型到 java 时间数据类型
- scala - 如何在while中使用withColumn Spark Dataframe scala
- reactjs - Babel反应jsx配置不起作用
- java - 如何读取 Web 服务器响应中的标头
- python - 提高应用方法的性能
- javascript - 使用 Jest 测试 3rd 方模块中的匿名函数