我在清单中声明我的服务:
<service
android:name=".MyService"
android:stopWithTask="false" />
MyService.java:
public class MyService extends Service {
private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// doing stuff
}
};
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public void onCreate() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_TIME_TICK);
registerReceiver(receiver, filter);
}
@Override
public void onDestroy() {
// does not get called
unregisterReceiver(receiver);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
// this method get called when i remove the task from recents
}
}
当我从Recents中移出应用时,onTaskRemoved
按预期运行,但BroadcastReceiver
的{{1}}方法不再被调用。
据我所知,与onReceive
动态注册的BroadcastReceiver
生命周期与注册该对象的对象相关联。我认为正因为如此,如果我的registerReceiver
仍在运行,则应该调用Service
。
我不确定onReceive
是否已停止,或Service
未注册。
无论哪种方式,如何在从最近删除任务时阻止它们停止?如果我不能,有没有办法立即重新启动它?
编辑:
我非常确定我的BroadcastReceiver
仍然在运行,因为操作系统并没有尝试重新启动它(正如它因为Service
而停止时会这样做),意味着问题是START_STICKY
未注册。为什么? (BroadcastReceiver
未被调用)
EDIT2:
发现问题。它是我正在测试的设备。我正在使用MIUI android ROM的小米Redmi Note 2。似乎从MIUI中的最近一次刷出时,操作系统会杀死整个过程(几乎就像任务杀手一样),而不仅仅是任务。
在我的其他设备上测试onDestroy
在停止任务后立即重新启动,因为它应该(因为Service
)。
答案 0 :(得分:0)