Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么我的服务在从最近的应用程序中刷卡时停止?_Android_Android Service_Android Broadcast - Fatal编程技术网

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
    }
}