我有一个等待的接收器TelephonyManager.ACTION_PHONE_STATE_CHANGED
:
public void onReceive(Context context, Intent intent) {
String theAction = intent.getAction();
if (theAction != null && theAction.equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) {
CONTEXT = context;
startListening();
}
当它得到它时,我注册监听器(用于方向传感器):
public void startListening() {
sensorManager = (SensorManager) CONTEXT.getSystemService(Context.SENSOR_SERVICE);
List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
if (sensors.size() > 0) {
sensor = sensors.get(0);
running = sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_FASTEST);
}
}
然后,在听众的onSensorChanged()
method:
public void onSensorChanged(SensorEvent event) {
if(running) {
sensorManager.unregisterListener(this);
// do some not significant stuff here
}
现在的问题是:我接到电话,接收器启动,然后监听器启动,一切都按设计进行。但是,稍后,当我查看电池统计数据时,我的应用程序被列为消耗 2-3% 的应用程序。And这个百分比正在增加虽然没有电话 - 因此是接收者is not在职的。
这种电池消耗从何而来?启动接收器的活动不起作用(无论如何它都是单个复选框)。我想,听众可能不会取消注册sensorManager.unregisterListener(this);
,但它应该可以工作 - 当监听器收到第一个事件时,我取消注册监听器,这是有道理的。
我该如何解决这个问题?
这种电池消耗从何而来?
永远永远永远永远永远永远永远永远永远不会在清单注册中包含某些内容BroadcastReceiver
生活超越onReceive()
。 IOW,您无法安全地注册SensorListener
从清单注册BroadcastReceiver
.
请有您的BroadcastReceiver
将工作委托给Service
(via startService()
),其中onStartCommand()
你注册了SensorListener
。当您获得传感器读数时,或超时后(提示:手机并不总是改变方向),或在onDestroy()
(如果 Android 决定关闭您的服务),取消注册侦听器并调用stopSelf()
关闭该服务。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)