0

我正在使用广播接收器来侦听通过 onclick 方法触发的意图服务。这一切都很好,但是如果屏幕旋转,我必须在 onPause 中取消注册(我也在 onDestory 中尝试过),然后在 onResume 中重新注册广播接收器。

我的问题是,在广播接收器未注册/注册期间,intentservice 可以将其广播发回说它已完成,然后这意味着广播接收器仍然坐在那里等待已经发生的事情。

我曾尝试在广播之前在 intentservice 中使用睡眠,但这绝不是完全证明,就好像设备再次旋转存在时间问题一样。

我从 onClick 启动并注册意图服务和广播接收器,如下所示:

Intent intentMyIntentService = new Intent(myclass.this,myservice.class);
startService(intentMyIntentService);


mybroadcastreciver = new br();
IntentFilter intentFilter = new IntentFilter(myservice.ACTION_ServiceE);
intentFilter.addCategory(Intent.CATEGORY_DEFAULT);
registerReceiver(mybroadcastreciver, intentFilter);

我的 br 方法是广播接收器,它作为它的 onReceive 方法,我使用 onSaveInstanceState 方法处理配置更改,然后检查 onCreate 以查看是否 Bundle != null 然后检索根据意图服务是否完成设置的布尔值使用它发送给接收者的广播。

如果屏幕不旋转,这一切都有效。但是我知道还有其他方法可以处理屏幕旋转,但我正在编写一个从 API 8 到 17 工作的应用程序。

谢谢

蒂姆

4

1 回答 1

0

BroadcastReceiver一种方法是在屏幕方向更改时保持相同的对象:

1) 返回 中的BroadcastReceiver对象Activity.onRetainNonConfigurationInstance()

2)在Activity.onCreate()使用中获取它(BroadCastReceiver) getLastNonConfigurationInstance()null如果未保存,则返回。

3) 在onClick()中,仅在没有在 中获得时才创建BroadcastReceiver对象Activity.onCreate()

于 2013-10-09T09:11:51.430 回答