以编程方式注册的广播接收器会有多长时间?

时间:2011-09-05 00:26:38

标签: android broadcastreceiver

我想在我的Android应用程序中实现功能,允许用户在我的应用程序支持他们的国家/地区时收到通知,我对如何实现此功能有一些疑问。

用例场景如下所示

用户进入活动,在那里他可以看到支持的国家/地区列表。用户的国家/地区始终是第一位的,如果不受支持,则会有一个按钮,用户可以点击该按钮,并在其国家/地区获得支持时请求通知。

一些想法

1。当用户点击按钮时,我将通过registerReceiver()方法注册网络状态更改的广播接收器。在注册接收器中,我将始终检查用户是否在WiFi上,如果是,请从服务器下载一些字节以检查现在是否支持用户的国家/地区。当得到支持时,我将取消注册接收器。我对这个想法的疑问是,以编程方式注册的广播接收器能存活多久?也许接收者需要活几个月。如果用户没有卸载我的应用程序,接收器是否会一直接收事件?

2. 在Android Manifest中注册广播接收器,当用户请求被通知时,在SharedPreferences中将boolean shouldBeInformed 放入,并在继续广播接收器之前始终检查此值。

您对如何优雅高效地处理此问题有任何想法吗? C2DM不适用于这种模式。

感谢。

1 个答案:

答案 0 :(得分:2)

  

我想在我的Android应用程序中实现功能,允许用户在我的应用程序支持他们的国家/地区时收到通知,我对如何实现此功能有一些疑问。

通常,“我的应用程序支持”意味着对该应用程序的更新。

  

用户的国家/地区始终是第一位的,如果不支持,则会有一个按钮,用户可以点击该按钮,并在其国家/地区获得支持时请求通知。

将国家/地区保存在SharedPreferences中。在每次更新应用程序后首次启动时,查看该国家/地区是否在受支持列表中,并弹出“嘿!它现在支持!”对话。或者,在紧要关头注册ACTION_PACKAGE_REPLACED,如果您的软件包已被替换,请查看您是否支持该国家/地区,并在状态栏中添加Notification

  

当用户点击按钮时,我将通过registerReceiver()方法注册网络状态改变的广播接收器。

为什么?

  

在注册接收器中,我将始终检查用户是否在WiFi上,如果是,请从服务器下载一些字节以检查现在是否支持用户的国家/地区。

您不需要BroadcastReceiver。每当您决定检查更新时(例如,每天一次通过AlarmManager),您可以检查设备是否在WiFi上。我不太清楚为什么你关心WiFi,我不知道这与更新你的应用程序有什么关系(通常由Android Market处理)。

  

当得到支持时,我将取消注册接收器。

很久以前它还没有注册。

  

我对这个想法的疑问是,以编程方式注册的广播接收器会存在多长时间?也许接收者需要活几个月。

用户在屏幕上进行活动的时间会很长。您需要在活动暂停前取消注册接收器。即使您在活动被破坏后故意泄漏接收器 - 这是一个坏主意 - 它将持续数分钟,直到Android终止该过程。

  

在Android Manifest中注册广播接收器,当用户请求被通知时,在SharedPreferences中输入boolean shouldBeInformed并始终在继续广播接收器之前检查此值。

为什么?