【发布时间】:2017-01-25 15:46:52
【问题描述】:
我有一个数据对象,它偶尔会使用重复警报从网络上的数据源刷新。
此数据对象跟踪希望在获得新数据时得到通知的对象。我目前使用两种方法来注册侦听器 - 如果他们希望仅在应用程序处于前台时刷新,他们可以注册为回调,或者如果需要通知观察对象,他们可以注册 PendingIntent,即使应用未激活。
我的问题是,如果我的数据对象从内存中删除,那么它的 PendingIntents 列表也会被删除。我想我可以想出一个复杂的方法来将列表和其中的所有字段保存在共享首选项或其他东西中,但我认为必须有更好的方法。
有没有一种方法可以让我知道系统拥有自己的 PendingIntent 列表,以获取所有“我的”PendingIntent?
请注意,我无法在创建对象时或在任何其他时间重新创建 PendingIntents - 它们是由侦听器创建的,并且无法推断它们设置了哪些字段或它们的值。
【问题讨论】:
-
“我想我可以想出一个复杂的方法来将列表和其中的所有字段保存在共享首选项或其他东西中”——不。 “它们是由监听器创建的,无法推断出它们设置了哪些字段或它们的值”——如果这些监听器在您的应用程序中,您为什么首先使用
PendingIntents?如果这些侦听器不在您的应用程序中,那么它们就不是您的PendingIntents(关于“对于所有 '我的'PendingIntents”)。 -
@CommonsWare:我的意图是使用 PendingIntent 通知我的其他应用程序组件来更新他们的显示或当我的数据对象刷新时他们想要做的任何事情。如果用户当时没有与应用程序交互,我还有什么其他方法可以通知我的应用程序组件有新数据可用?在这种特殊情况下,我正在更新 appWidgets 之类的东西,它显示数据并检查是否应该发出通知。
-
“我还有什么其他方法可以通知我的应用组件有新数据可用?” -- 嗯,调用 Java 对象的方法?如果您担心的是紧耦合,请使用事件总线。 “我正在更新 appWidgets 之类的东西,它显示数据并检查是否应该发出通知”——使用
AppWidgetManager来更新应用小部件。更新应用小部件不需要PendingIntent。 -
@CommonsWare:你似乎误解了我的用例。数据对象不知道哪些组件需要更新,所以我不能只列出它们并进行调用。当应用程序在内存中时,我可以注册侦听器并对其进行调用,但是当它被系统删除时,我的侦听器列表就消失了。这就是促使我使用 PendingIntents 的原因。
-
“数据对象不知道哪些组件需要更新,所以我不能只列出它们并进行调用”——使用事件总线或 RxJava。 “这就是促使我使用 PendingIntents 的原因”——AFAIK,
PendingIntent是引用计数的,一旦没有使用它就会被删除。另外,您无法取回“您的”PendingIntents,除非重新创建它们。
标签: android android-intent android-pendingintent