Android 为什么我的服务在从最近的应用程序中刷卡时停止?
我在舱单中声明我的服务如下:Android 为什么我的服务在从最近的应用程序中刷卡时停止?,android,android-service,android-broadcast,Android,Android Service,Android Broadcast,我在舱单中声明我的服务如下: <service android:name=".MyService" android:stopWithTask="false" /> 当我从Recents刷出应用程序时,onTaskRemoved按预期运行,但是BroadcastReceiver的onReceive方法不再被调用 据我所知,使用registerReceiver动态注册的BroadcastReceiver的生命周期与注册它的对象绑定。因此,我认为如果我的服务仍在运行,那么
<service
android:name=".MyService"
android:stopWithTask="false" />
当我从Recents刷出应用程序时,onTaskRemoved
按预期运行,但是BroadcastReceiver
的onReceive
方法不再被调用
据我所知,使用registerReceiver
动态注册的BroadcastReceiver
的生命周期与注册它的对象绑定。因此,我认为如果我的服务
仍在运行,那么应该调用onReceive
我不确定我的服务
是否已停止,或者广播接收器
是否已注销
无论哪种方式,当任务从最近删除时,如何防止它们停止?如果我不能,有没有办法立即重新启动
编辑:
我很确定我的服务仍在运行,因为操作系统不会尝试重新启动它(如果因为START\u STICKY
而停止,它应该会这样做),这意味着问题在于广播接收器未注册。为什么?(onDestroy
未被调用)
编辑2:
发现了问题。这是我测试的设备。我用的是MIUI安卓ROM上的小米Redmi Note 2。似乎当从最近的MIUI中刷出时,操作系统杀死了整个过程(就像任务杀手一样),而不仅仅是任务。
在我的其他设备上测试服务
在停止任务后立即重新启动,这是它应该的(因为启动_STICKY
)。检查解决方法,以便在从SO链接重新启动后处理服务:
请看这篇100%帮助您的文章。。
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
}
}