android – 以编程方式注册的广播接收器可以使用多长时间?

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

用例场景如下所示:

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

一些想法:

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

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

您有任何想法如何优雅高效地处理这个问题?在这种情况下,C2DM不是合适的解决方案.

谢谢.

最佳答案

I want to implement feature in my Android application which will allow user to receive notification when their country is supported in my application and I have some doubts how to implement this feature.

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

User’s country is always first and if it’s not supported there is a button where he can click and request to be informed when his country become supported.

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

When user click on a button I’ll register network state changed broadcast receiver via registerReceiver() method.

为什么?

In registered receiver I’ll always check if user is on WiFi and if it is, download some bytes from server to check if user’s country is now supported.

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

And when became supported I’ll unregister the receiver.

它很久以前就没有注册了.

My doubt in this idea is how long will programmatically registered broadcast receiver live? Maybe receiver will need to live for months.

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

Register broadcast receiver in Android Manifest and when user request to be informed put boolean shouldBeInformed in SharedPreferences and always check this value before proceeding in broadcast receiver.

为什么?

点赞