Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.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_Broadcastreceiver_Android Pendingintent_Foreground Service - Fatal编程技术网

Android 未决意图是否有生命周期?

Android 未决意图是否有生命周期?,android,broadcastreceiver,android-pendingintent,foreground-service,Android,Broadcastreceiver,Android Pendingintent,Foreground Service,我有一个运行前台服务的应用程序。应用程序有一个启动/停止按钮作为其通知的一部分,可以猜测它启动和停止前台服务。单击“开始”按钮后,将触发挂起的意图 考虑以下场景: 应用程序已被销毁[从最近的项目列表中删除],但通知仍然可见。 我能够启动和停止前台服务,即使应用程序已被销毁,因为单击通知按钮会触发一个挂起的意图(这反过来会调用广播接收器)。 但是,我观察到,一两天后,单击通知上的按钮时,未触发挂起的意图(即前台服务未启动)。这就引出了一个问题:在包含应用程序的应用程序被销毁之后,挂起的意图是否有一

我有一个运行前台服务的应用程序。应用程序有一个启动/停止按钮作为其通知的一部分,可以猜测它启动和停止前台服务。单击“开始”按钮后,将触发挂起的意图

考虑以下场景:

应用程序已被销毁[从最近的项目列表中删除],但通知仍然可见。 我能够启动和停止前台服务,即使应用程序已被销毁,因为单击通知按钮会触发一个挂起的意图(这反过来会调用广播接收器)。 但是,我观察到,一两天后,单击通知上的按钮时,未触发挂起的意图(即前台服务未启动)。这就引出了一个问题:在包含应用程序的应用程序被销毁之后,挂起的意图是否有一个生存期?还是我错过了什么

我的电话:

Intent notificationBroadcastIntent = new Intent(this, MyBroadcastReceiver.class);
        PendingIntent playIntent = PendingIntent.getBroadcast(this, MY_REQUEST_CODE,
                notificationBroadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);
由挂起意图调用的广播接收器(该意图反过来启动前台服务):


pendingent
s不会过期。但是,它们不是持久性的,在设备重新启动后将无法存活

要查看
pendingent
是否仍然存在,可以使用以下adb命令:

adb外壳转储系统活动意图

这将列出系统中所有的
pendingent
s。您还可以使用以下方法查看通知:

adb外壳转储系统通知


这将显示所有的
通知
s,包括为它们设置的
挂起内容。

感谢您的回复。我还想了解一件事。如果应用程序已被销毁,并且只剩下前台服务通知,则该通知具有启动和停止服务的按钮(触发服务启动的挂起意图),该通知触发挂起意图的时间是否有限制?否。没有时间限制。你的问题是别的。你在什么设备上看到过这种行为?我在三星手机上看到过。如果应用程序已被销毁,且通知按钮处于停止状态(即前台服务未运行),并且我在一天内未更改通知上的状态,则尝试从通知启动前台服务(这是一个待定的意图),我会看到前台服务未启动。我曾尝试过从adb进行调试,但没有发现任何异常。难以置信。你有没有在没有过滤的情况下检查logcat?有时过滤logcat会导致您错过一些重要的内容。您是否在其他设备上尝试过此功能?在考虑了问题发生时的所有日志后,我发现了此功能。广播队列:不允许后台执行:接收到com.oneplus.security/.network.trafficalarm.TrafficUsageAlarmReceiver的意图{act=android.net.conn.DATA\u ACTIVITY\u CHANGE flg=0x10(有额外功能)}。当对前台服务的调用未使用startForegroundService()时,会出现此异常。无论上述电话在哪里错过,我都会做出必要的改变。如果这解决了问题,将更新您。
@Override
    public void onReceive(Context context, Intent intent) {
        Log.i(MyBroadcastReceiver.class.getSimpleName(), "MyBroadcastReceiver called to update service notification");
        
 if (isMyForegroundServiceRunning(MyForegroundService.class, context)) {
            Intent stopIntent = new Intent(context, MyForegroundService.class);
            stopIntent.setAction(STOP_SERVICE_ACTION);
            context.startService(stopIntent);
        } else {
            Intent startIntent = new Intent(context, MyForegroundService.class);
            startIntent.setAction(START_SERVICE_ACTION);
            context.startService(startIntent);
        }
    }