延长电池续航时间--传感器,WakeLock

一. 传感器

传感器使用方式和定位服务类似:应用向特定的传感器注册监听器,获得更新通知。

private void registerWithAccelerometer(){
		SensorManager sm=(SensorManager) getSystemService(Context.SENSOR_SERVICE);
		List<Sensor> sensors=sm.getSensorList(Sensor.TYPE_ACCELEROMETER);
		if(sensors!=null&&!sensors.isEmpty()){
			SensorEventListener listener=new SensorEventListener() {

				@Override
				public void onSensorChanged(SensorEvent event) {
					// TODO Auto-generated method stub

				}

				@Override
				public void onAccuracyChanged(Sensor sensor, int accuracy) {
					// TODO Auto-generated method stub
					//dosomthing();
				}
			};
			Sensor sensor=sensors.get(0);
			sm.registerListener(listener, sensor,SensorManager.SENSOR_DELAY_NORMAL);
		}
	}

和定位一样,android也可以让应用指定什么样的频度去获取传感器更新,位置服务是毫秒,只能指定4个值之一:SENSOR_DELAY_NORMAL,SENSOR_DELAY_UI,SENSOR_DELAY_GAME,SENSOR_DELAY_FASTEST.

当不需要通知时,禁用传感器的监听器。用SensorManager的unregisterListener()方法达到此目的。

二.WakeLock

在某些情况下,一些应用程序即使用户长时间不有设备交互,也要阻止设备进入休眠状态,来保持良好的用户体验。比如:当用户观看设备上的视频或电影时,这种情况下,需要CPU做视频解码,同时屏幕保持开启,让用户能够观看。此外,视频播放时屏幕不能变暗。

Android为这种场景设计了WakeLock类:

private void runInWakeLock(Runnable runnable, int flags) {
		PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
		PowerManager.WakeLock wl = pm.newWakeLock(flags, "My WakeLock");
		wl.acquire();
		runnable.run();
		wl.release();
	}

注:应用需要WAKE_LOCK的权限来使用。

系统的行为取决于创建WakeLock对象传入的标记(flags)参数。定义如下:

(1)PARTIAL_WAKE_LOCK(CPU开)

(2) SCREEN_DIM_WAKE_LOCK(CPU开、暗色显示)

(3)SCREEN_BRIGHT_WAKE_LOCK(CPU开、明亮显示)

(4)FULL_WAKE_LOCK(CPU开、明亮显示、键盘开)

这些标记可以结合使用

(1)ACQUIRE_CAUSES_WAKEUP(打开屏幕和键盘)

(2)ON_AFTER_RELEASE(WakeLock释放后继续保持屏幕和键盘开启片刻)

防止问题出现:

使用带超时的WakeLock.acquire()版本,它会在超过时限后释放WakeLock。如:播放视频的应用可以使用视频长度作为WakeLock超时时间。

如果用到平屏幕是和Activity中的View关联的,也可以在布局文件中使用XML属性android:keepScreenOn.这样的好处是不必冒着忘记释放WakeLock的风险,交由系统处理。

时间: 2024-11-07 21:22:57

延长电池续航时间--传感器,WakeLock的相关文章

Android App优化之延长电池续航时间

禁用广播接收器 确保广播接收器在真正需要时才执行指令,在onResume中其中广播接收器,在onPause中禁用, 在manifest文件中声明广播接收器时,事先默认配置成禁用的 <receiver android:name=".BatterReceiver" android:enabled="false"> 网络 1. 后台数据,后台传输数据时,判断ConnectivityManager的getBackgroundDataSetting()的返回值,如

延长电池续航时间--网络数据的影响

Android设备通常的多个数据连接: (1)Bluetooth (2)Ethernet (3)WI-FI (4)WiMax (5)移动网络(EDGE,UMTS,LTE) 获取网络信息: public class NetInfo extends Activity { private TextView netInfoShow,netInfoShows; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Au

延长电池续航时间--定位

Android提供了多种位置服务: (1)GPS(使用卫星的全球定位系统): (2)网络(用Cell-ID来进行基站定位,WI-FI服务地址) (3)被动(API等级8加入) 在没有特别要求下,可以设置更新的频率,减少请求次数.注册监听器,在不用时,禁止位置监听 //接受位置更新 private void requestLocationUpdates() { LocationManager lm = (LocationManager) getSystemService(Context.LOCAT

Android最佳实践之性能 - 电池续航时间优化

Doze和App Standby的优化(API23) 参考地址:http://developer.android.com/training/monitoring-device-state/doze-standby.html 从Android 6.0 (API level 23)开始,Android提供了两个节电功能用来增加电池的续航时间.Doze 可以在设备长时间不使用时,通过延迟后台CPU和网络的活动来减少电池的消耗:App Standby将延迟没有交互的app网络活动. Doze和App S

电池更换计划中获利?苹果面临电池质押投诉

苹果被指责发现iPhone不必要的故障,从而从电池更换计划中获利.当美国公司宣布去年12月为了"延长电池续航时间"而放缓iPhone手机时,为了不早点告诉别人而道歉.面对消费者的强烈反应,它承诺iPhone6的所有者和更现代的型号可以享受折扣或免费更换电池. "只有因为你的信仰和支持,我们才能完成我们所热爱的工作-而且我们永远不会忘记或认为理所当然."但自那时以来,一些看门狗观众告诉该计划,他们对公司的信心在试图让苹果公司接受其报价后严重动摇. 苹果要求一些客户支付

安卓性能优化手册

本手册适合至少有初级经验的开发者查阅或复习相关知识使用,新手可能会看不懂. 1.java代码优化 1.1安卓如何执行代码 dvm:.java->.class->.dex->.apk 优化斐波那契数列: 斐波那契数列的递推公式是f(n)=f(n-1)+f(n-2),特征方程为:x2=x+1,解该方程得(1+sqrt(5))/2,(1-sqrt(5))/2.所以f(n)=Ax1n+Bx2n,带入f(0)=0,f(1)=1得A=sqrt(5)/5,B=-sqrt(5)/5.则f(n)求出. B

17、android设备如何防止屏幕休眠(转载)

当你需要你的设备需要长期运行时,由于移动设备为了延长电池续航时间,在运行15s-30mins后(用户可自由设置),如果用户在此时间段内没有操作,系统将进入休眠状态并 将屏幕锁上,所以在需要长期运行时,我们需要一种方法来保持屏幕一直显示,所以有了此文.以下三种方法均转自网络,第一种方法亲测可以生效,其余方法还请读者自己测试. 第一种方法是在activity创建的时候,通过“getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREE

从Note 5看三星大招 究竟能不能秒杀iPhone

从当年HTC发布第一代Android手机G1开始,无数Android旗舰机型都被冠以"iPhone"杀手的名号.可惜直到现在,iPhone活得愈发滋润,竞争对手却一个个沉沦下去.HTC M系列成为人人口诛笔伐的对象.索尼Z系列外形如出一辙.摩托罗拉 X系列已归降于联想.国产手机更是与iPhone比肩的资格都没有--似乎,只有三星Galaxy系列的高端机型还在死撑. 虽然依然是被iPhone打得灰头土脸,销量.人气也越来越低,但三星Galaxy系列高端机型却依然是最有可能与iPhone对

Android 5.1将于下月发布,将改善续航功能

谷歌计划3月份在更大范围内发布Android 5.1.莫弗斯在回答用户有关One M7 Google Play版智能手机的问题时表示,"这与谷歌计划在3月份发布的下一个MR(维护版本)有关",表明他已经获悉谷歌在更大范围内发布Android升级版的时间. Android 5.1将改进"OK Google"命令,以及Lollipop的通知功能,延长电池续航时间,但谷歌尚未公开讨论Android 5.1或其改进之处.另据PCWorld报道称,运行Android 5.1的