Muh*_*mad 30 android broadcastreceiver intentservice
我什么时候应该使用unregisterReceiver?在onPause(),onDestroy()或onStop()?
注意:我需要该服务在后台运行.
更新:
我发布接收器的异常null.
活动已泄露意图接收器是你错过了呼叫 unregisterReceiver();
请告诉我是否有什么问题,这是我的代码:
private boolean processedObstacleReceiverStarted;
private boolean mainNotificationReceiverStarted;
protected void onResume() {
super.onResume();
try {
registerReceivers();
} catch (Exception e) {
Log.e(MatabbatManager.TAG,
"MAINActivity: could not register receiver for Matanbbat Action "
+ e.getMessage());
}
}
private void registerReceivers() {
if (!mainNotificationReceiverStarted) {
mainNotificationReceiver = new MainNotificationReceiver();
IntentFilter notificationIntent = new IntentFilter();
notificationIntent
.addAction(MatabbatManager.MATABAT_LOCATION_ACTION);
notificationIntent
.addAction(MatabbatManager.MATABAT_New_DATA_RECEIVED);
notificationIntent
.addAction(MatabbatManager.STATUS_NOTIFCATION_ACTION);
registerReceiver(mainNotificationReceiver, notificationIntent);
mainNotificationReceiverStarted = true;
}
if (!processedObstacleReceiverStarted) {
processedObstacleReceiver = new ProcessedObstacleReceiver();
registerReceiver(processedObstacleReceiver, new IntentFilter(
MatabbatManager.MATABAT_ALARM_LOCATION_ACTION));
processedObstacleReceiverStarted = true;
}
}
private void unRegisterReceivers() {
if (mainNotificationReceiverStarted) {
unregisterReceiver(mainNotificationReceiver);
mainNotificationReceiverStarted = false;
}
if (processedObstacleReceiverStarted) {
unregisterReceiver(processedObstacleReceiver);
processedObstacleReceiverStarted = false;
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
try {
unRegisterReceivers();
mWakeLock.release();//keep screen on
} catch (Exception e) {
Log.e(MatabbatManager.TAG, getClass() + " Releasing receivers-" + e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
sti*_*ike 78
这取决于您注册接收器的位置.互补方法对是
onCreate - onDestroy
onResume - onPause
onStart - onStop
Run Code Online (Sandbox Code Playgroud)
如果你在第一个接收器中注册接收器,那么在它的结束方法中取消注册它.
您应该实现onStop()以释放活动资源(如网络连接)或取消注册广播接收器.
然后,我会跟随这些对(使用@ StinePike的类比):
onResume - onPause
onStart - onStop
Run Code Online (Sandbox Code Playgroud)
由于Android生命周期,@ w3bshark提到:
在后HoneyComb(3.0+)设备中,onStop()是最后一个保证处理程序.
| 归档时间: |
|
| 查看次数: |
23642 次 |
| 最近记录: |