我正在使用广播接收器来侦听通过onclick方法触发的意图服务。这一切都很好,但如果屏幕旋转,我不得不在onPause(我也在onDestory中尝试过(方法中取消注册,然后在onResume中重新注册广播接收器。
我的问题是,在广播接收器未注册/注册期间,意图服务可以将其广播发送回以表示其已完成,然后这意味着广播接收器仍然坐在那里等待已经发生的事情。
我曾尝试在广播前在意图服务中使用睡眠,但这绝不是完全证明,因为如果设备再次旋转存在计时问题。
我从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 以查看捆绑包 != null 是否然后检索布尔值,该布尔值的设置取决于意图服务是否完成使用它发送到接收器的广播。
如果屏幕不旋转,这将完成所有工作。但是我知道还有其他方法可以处理屏幕旋转,但我正在编写一个应用程序以从 API 8 到 17 工作。
谢谢
提姆
一种方法是在屏幕方向更改时保持相同的BroadcastReceiver
对象:
1( 返回Activity.onRetainNonConfigurationInstance()
中的BroadcastReceiver
对象。
2(使用(BroadCastReceiver) getLastNonConfigurationInstance()
Activity.onCreate()
获取它。如果未保存,它将返回null
。
3(在onClick()
中,只有在Activity.onCreate()
中没有获得BroadcastReceiver
对象时,才创建该对象。