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