Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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
Java 如何使活动在暂停时对本地广播作出反应?_Java_Android_Android Activity_Broadcast - Fatal编程技术网

Java 如何使活动在暂停时对本地广播作出反应?

Java 如何使活动在暂停时对本地广播作出反应?,java,android,android-activity,broadcast,Java,Android,Android Activity,Broadcast,使活动(如果有)对在活动暂停或停止期间发送的广播作出反应的最佳方法是什么。如果LocalBroadcastManager与普通广播不同,我找不到太多细节,但是如果活动在后台,似乎仍然会调用is事件。但这会导致一些问题,因为只要不显示活动,就不可能对UI进行某些修改 这就是为什么我更愿意在活动返回顶部时处理所有广播。但我该怎么做呢。我正在考虑一个队列,它将包含一个可运行程序列表,当活动返回到运行状态时,这些可运行程序将被执行。但我认为这有点过头了,因为android surly确实有这样的机制 那

使活动(如果有)对在活动暂停或停止期间发送的广播作出反应的最佳方法是什么。如果
LocalBroadcastManager
与普通广播不同,我找不到太多细节,但是如果活动在后台,似乎仍然会调用is事件。但这会导致一些问题,因为只要不显示活动,就不可能对UI进行某些修改

这就是为什么我更愿意在活动返回顶部时处理所有广播。但我该怎么做呢。我正在考虑一个队列,它将包含一个可运行程序列表,当活动返回到运行状态时,这些可运行程序将被执行。但我认为这有点过头了,因为android surly确实有这样的机制


那么正确的方法是什么呢?

我过去所做的就是让我的活动在恢复时注册接收者,在暂停时注销接收者

创建完证书后,将更新视图和发送广播所需的任何信息保存到本地存储


如果活动正在运行,它将接收广播并自行更新。如果暂停,您应该在Resume上读取本地存储并进行相应更新。

为什么不干脆注销receiver OnRestory?所以当活动暂停时,您仍然可以在接收器中执行代码?

毕竟我找到了一个适合我需要的解决方案。我创建了一个BroadcastReceiver,用作我的活动的子类。每当活动进入暂停状态时,它都会在我的BroadcastReceiver上调用.pause()。从那时起,所有传入的意图都被放入一个队列,并在从活动调用.unpuse()时被刷新。

您的目的是什么?我的意思是,例如,可以用来有效地更新用户界面。也许还有其他方法可以解决您的问题?我正在AsyncTask中创建一些X509证书,并希望在完成后更新我的活动。应删除此问题中的livecycle标记。该标签用于与Adobe LiveCycle ES相关的问题。我同意。对Chris来说:在这种情况下,使用服务比使用
AsyncTask
要好,正如上面所说:…AsyncTask最好用于短操作(最多几秒钟)。@monkybonk05:这是一种可能的方法,但我使用这些证书的方式,我不希望它们在我的应用程序中的某一点之前一直存在于持久性内存中。当然,我可以像你提到的那样做,或者作为一个静态场。这似乎是Android上常见的解决方案,但我不认为它是干净的代码,因为它可能会导致线程问题,并重写我的类的灵活性。我的活动接收到的广播是一段本地代码,它不应该依赖于我在这个类之外所做的任何修改。这就是为什么我在寻找另一种方法。@Chris如果应用程序在后台,就不能保证它会返回前台。如果操作系统需要资源,可以将其从内存中删除。也就是说,我建议您重新评估根据Android文档保存数据的安全性,不保证调用此方法,并且在活动重新启动时,您可能会收到泄漏的广播接收器异常。如果目标是Honeycomb之后的SDK版本,则可以在onStop()中注销接收器。如果您的目标是预蜂窝设备,那么也可能不会调用onStop。您在哪里注册接收器?排队系统是否已包含在BroadcastReceiver中中,或者您必须自己实现它?