我有一个等待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()以关闭服务.
总结以上是内存溢出为你收集整理的java-带侦听器的BroadcastReceiver在不使用时会耗尽电池全部内容,希望文章能够帮你解决java-带侦听器的BroadcastReceiver在不使用时会耗尽电池所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)