我什么时候应该使用取消注册接收器?在onPawn()
、onDestroy()
或onStop()
中?
注意:我需要在后台运行该服务。
更新:
>
我得到一个异常释放接收器null
。
活动已泄露意图接收器您是否错过了对取消注册接收器()的调用;
如果有问题,请告诉我,这是我的代码:
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());
}
}
就这么简单,如果你想监听事件,即使你的活动不可见,然后在onStop()中调用取消注册(例如,从活动A你打开活动B,但如果你想让A仍然监听事件)。
但是,当您只想在活动可见时监听事件时,则在onPawn中调用unlogin()(例如,从活动A中您打开了活动B,但现在您不想监听活动A中的事件)。
希望这有助于你的问题。
来自Android文档:
您应该实现onStop()来释放活动资源,例如网络连接或注销广播接收器。
然后,我将遵循这些对(使用@StinePike的类比):
onResume - onPause
onStart - onStop
因为Android的生命周期,正如@w3b鲨鱼提到的:
在后HoneyComb(3.0)设备中,onStop()是最后一个有保证的处理程序。
这取决于您在哪里注册接收器。互补方法对为:
onCreate - onDestroy
onResume - onPause
onStart - onStop
如果您在第一个接收方中注册接收器,然后在其结束方法中注销它。
本文向大家介绍uwp 取消注册任务,包括了uwp 取消注册任务的使用技巧和注意事项,需要的朋友参考一下 示例
常见问题:如何卸载Service Worker?对于使用JavaScript注销服务工作人员有一个很好的答案。如何让服务工作者在注销时清除任何命名缓存? 从MDN,服务工作人员将在注销之前完成任何正在进行的操作。因此,听起来应该可以监听 状态会做什么。 伸手去抓稻草,虽然我看到了卸载标志的引用,但我还没有看到它暴露在任何地方。建议?
我已经在创建服务方法上注册了接收者,并在销毁方法上取消注册?它工作得很好,但在某些三星Galaxy s3上,即使我停止服务,我仍然会收到接收器。如何找到解决办法?有可能吗?请帮帮我.提前致谢 }
我无法从NPM安装任何节点模块。 上面的命令导致了下面的输出,它无法安装socket.io
我想设置一个由多个步骤组成的用户注册。每个步骤将以条的形式突出显示。深灰色条将是完成的步骤,浅灰色条将是需要完成的步骤。似乎想不出这样做的方法。请建议。 我们可以在myfitnesspal注册中看到这一点。我在下图的红色框中突出显示了这一点。
问题内容: 因此,这可能是一个愚蠢的问题,但是何时使用以下方法注册课程: 当前,我正在类似接口的类的构造函数中执行此操作,该类在其他类中用于简化数据存储对我的应用程序的使用。但是,我收到此错误: 尝试两次注册种类“用户” 所以,我想我的问题是,您多久在一次Objective中注册类? 谢谢! PS这是我的整个课程: 问题答案: 更新资料 这是最佳实践解决方案: 使用您自己的服务,这可以确保在使用O