假设我有一个包含数据对象的 Activity 。它根据该对象更新其 gui 组件。现在假设它已暂停(调用 OnPause)但未停止或已销毁
与此同时,收到推送通知(intentservice 已启动),我需要使用推送通知对象更新该对象,以便在恢复应用程序时更新 gui。
我考虑过向 Activity 发送广播,以便它可以更新其数据对象,但我在某处读到,当 Activity 暂停时,就不会收到广播。
遇到这种情况怎么办?
最佳答案
执行此操作的困难但正确的方法是为您的应用构建您自己的自定义 ContentProvider
并更新从网络服务接收的所有数据并将通知推送到此 ContentProvider
。当 Activity
回到前台时,它会使用 ContentProvider
提供的新数据更新自身。
很难,因为制作自定义 ContentProvider
需要大量工作。这是正确的方式,因为它符合移动应用程序的行为和 Android 架构:假设用户激活网络服务或某些计算密集型任务,然后关闭应用程序;或者说推送通知到达并要求更新和显示应用程序的数据。在这两种情况下,应用程序的 Activity
可能不再位于前台,但 Service
可用于执行一些非 UI 操作。现在,在该操作结束时,Service
通过 ContentProvider
更改数据,当用户再次激活应用程序时,Activity
s 从 ContentProvider
获取他们的新数据。
Content providers are the standard interface that connects data in one process with code running in another process.
作为开发者,您应该始终假设用户可以随时调用应用程序,也可以随时关闭应用程序。无论 Activity
是否在前台,应用程序的数据都需要正确更新和维护。
Google 自己的应用程序使用自定义 ContentProvider
。 Gmail
应用程序特别利用其 ContentProvider
在网络连接可用时获取新电子邮件并离线显示电子邮件。 Facebook
、WhatsApp
和 Twitter
Android 应用程序也使用 ContentProvider
。
关于android - 暂停时从服务更新 Activity 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28785346/