标签:battery android java broadcastreceiver
我有一个等待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()方法中:
public void onSensorChanged(SensorEvent event) {
if(running) {
sensorManager.unregisterListener(this);
// do some not significant stuff here
}
现在的问题是:我接到一个电话,听筒启动,然后听筒启动,一切都按设计进行.但是,稍后,当我查看电池电量统计信息时,我的应用被列为耗电量为2-3%的应用.即使没有呼叫,此百分比也在增加-因此接收器无法正常工作.
电池耗电从何而来?启动接收器的活动不起作用(无论如何,它是单个复选框).我想,侦听器可能不会通过sensorManager.unregisterListener(this);取消注册,但这应该起作用-我在接收到第一个事件时注销了侦听器,这是有道理的.
我该如何解决这个问题?
解决方法:
Where does this battery drain come from?
永远不会永远不会永远永远不会永远永远不会永远不会在清单注册的BroadcastReceiver中拥有onReceive()之外的东西. IOW,您不能从清单注册的BroadcastReceiver中安全地注册SensorListener.
请让您的BroadcastReceiver委托工作到一个服务(通过startService()),在其中,您可以在onStartCommand()中注册SensorListener.当您获得传感器读数时,或者在超时(提示:电话并不总是改变方向)之后,或者在onDestroy()中(如果Android决定关闭您的服务),请注销侦听器并调用stopSelf()以关闭服务.
标签:battery,android,java,broadcastreceiver 来源: https://codeday.me/bug/20191009/1879245.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。