用于同时向活动和服务通知事件的模式

时间:2013-04-18 21:51:34

标签: android service android-activity broadcastreceiver intentservice

我想知道以下场景的最佳模式:

1)ActivityA包含一个按钮,可在按下时重置应用数据

2)IntentServiceAIntentServiceBActivityB希望收到有关该事件的通知。 IntentServiceA清除了应用的数据库,IntentServiceB从内部存储中移除了一些文件,ActivityB虽然已停止,但却删除了来自指定内部Handler的所有待处理邮件

以下是我目前的情况设计:

1)ActivityA使用具有特定操作的sendBroadcast()(比如ACTION_RESET_DATA)来通知事件

2)ActivityB有一个内部私有BrodcastReceiver,它在onCreate()方法上注册,因为即使活动停止,它也必须响应操作

3)IntentServiceAIntentServiceB也有BroadcastReceivers,但它们被声明为public static并在AndroidManifest.xml中声明。这样,无需在相应服务上进行任何注册即可访问它们。所有BroadcastReceiver做的都是启动外部服务,然后在onHandleIntent()方法上检查意图对ACTION_RESET_DATA的操作

虽然它有效,但我可以通过这种方法看到两个主要问题:

  • 在清单上声明了一个其他应用无法访问的intent过滤器。实际上,IntentService和内部BroadcastReceiver都声明为exported="false"
  • 我无法使用LocalBroadcastManager,因为它与AndroidManifest.xml中声明的BroadcastReceivers不兼容。这是可取的,因为有问题的广播是我的应用内部的

我可以从BroadcastReceiver移除IntentServices并从startService通过ActivityA手动启动它们,并保持ActivityB不变,但如果数字是多少服务增加?我必须包含代码才能启动所有这些代码?实际上,我在我的应用程序中还有其他一些像这样的情况,我不确定如何正确处理它们。

任何提示?

1 个答案:

答案 0 :(得分:0)

尝试sharedPreferences。当价值发生变化时,将通知活动。

http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html