有一些BroadcastReceiver在 activate 方法中onStart注册并在onStop.
有一个服务发送一个意图,它应该捕获给定的BroadcastReceiver一个并在活动中显示来自它的数据,它是它的类字段。
如果服务在屏幕旋转的那一刻发送了一个意图,即在接收器被停用但尚未注册的时候,那么来自服务的数据将不再达到激活(如果用户会发生类似情况只是在下载过程中最小化应用程序)。
请告诉我如何正确处理这种情况。
附言。也许在这种情况下,服务和活动之间的一些其他通信方式会起作用。为了更具体和简化任务,它看起来像这样:
在活动中,我们按下按钮,启动一项服务,从 Internet 下载文本并将此文本返回到显示它的活动。主要目标是保证数据从服务到活动的传递。
这个任务很常见,我相信很多人已经解决了它,但由于某种原因我找不到好的解决方案。
好吧,您可以不在活动中连接和包含接收器,而是在片段中使用
setRetainInstance(true);- 此命令将防止在屏幕旋转时重新创建片段。这是 Google 推荐的在 Activity 中存储数据的做法。我认为这也适用于您的问题。通常,您需要将状态存储在某处(例如,是的,在服务或此片段中)并在活动恢复时显示此状态。一般来说,对于这一切,有一个架构解决方案,例如 MVP MVC 等)。您可以自己实现或使用它。Mosby,Moxy,很多。底线是这样的——恢复时,activity请求当前状态下的service/presenter/singleton(数据是/不是/正在加载)并显示状态。同时,存储状态的实体当然不应该在旋转时被破坏。这样的实体可以是上面说的fragment,单例,service,presenter。没有灵丹妙药。现在流行使用 MVP 方法。就个人而言,我使用 Mosby。在演示者中,状态 - 在活动的生命周期方法中,我从演示者那里请求并显示它。