android - 暂停时从服务更新 Activity 数据

标签 android android-sqlite android-contentprovider android-lifecycle

假设我有一个包含数据对象的 Activity 。它根据该对象更新其 gui 组件。现在假设它已暂停(调用 OnPause)但未停止或已销毁

与此同时,收到推送通知(intentservice 已启动),我需要使用推送通知对象更新该对象,以便在恢复应用程序时更新 gui。

我考虑过向 Activity 发送广播,以便它可以更新其数据对象,但我在某处读到,当 Activity 暂停时,就不会收到广播。

遇到这种情况怎么办?

最佳答案

执行此操作的困难但正确的方法是为您的应用构建您自己的自定义 ContentProvider 并更新从网络服务接收的所有数据并将通知推送到此 ContentProvider。当 Activity 回到前台时,它会使用 ContentProvider 提供的新数据更新自身。

很难,因为制作自定义 ContentProvider 需要大量工作。这是正确的方式,因为它符合移动应用程序的行为和 Android 架构:假设用户激活网络服务或某些计算密集型任务,然后关闭应用程序;或者说推送通知到达并要求更新和显示应用程序的数据。在这两种情况下,应用程序的 Activity 可能不再位于前台,但 Service 可用于执行一些非 UI 操作。现在,在该操作结束时,Service 通过 ContentProvider 更改数据,当用户再次激活应用程序时,Activitys 从 ContentProvider 获取他们的新数据。

引用official tutorial :

Content providers are the standard interface that connects data in one process with code running in another process.

作为开发者,您应该始终假设用户可以随时调用应用程序,也可以随时关闭应用程序。无论 Activity 是否在前台,应用程序的数据都需要正确更新和维护。

Google 自己的应用程序使用自定义 ContentProviderGmail 应用程序特别利用其 ContentProvider 在网络连接可用时获取新电子邮件并离线显示电子邮件。 FacebookWhatsAppTwitter Android 应用程序也使用 ContentProvider

关于android - 暂停时从服务更新 Activity 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28785346/

相关文章:

java - EditText数字分组仅显示4个字符

java - Android onsaveinstancestate()

android - GreenDao中如何实现表继承

android - SQLiteOpenHelper onCreate()/onUpgrade() 何时运行?

java - SQLite onUpgrade 删除和添加列

android - 如何在 Android 中不使用 GPS 获取纬度经度值?

javascript - 从 PhoneGap JavaScript 访问 Android 上的 Content Provider

android - 如何使用 FileProvider 从任何路径共享文件?

android - 使用addrow for MatrixCursor,如何添加不同的对象类型?

Android:来自 AlertDialog 的 startActivity()