解决方法:
在启动service的时候,获取电源设备锁,等到停止服务的时候释放电源设备锁。
这个方法需要权限:
< uses-permission Android:name=”android.permission.WAKE_LOCK”/>
这个方法需要权限:
< uses-permission Android:name=”android.permission.WAKE_LOCK”/>
@Override
public void onCreate() { super.onCreate(); acquireWakeLock();//获取设备电源锁 mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); ..... }
// 申请设备电源锁 private void acquireWakeLock() { L.l(TAG, "正在申请电源锁"); if (null == mWakeLock) { PowerManager pm = (PowerManager) this .getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, ""); if (null != mWakeLock) { mWakeLock.acquire(); L.l(TAG, "电源锁申请成功"); } } } // 释放设备电源锁 private void releaseWakeLock() { L.l(TAG, "正在释放电源锁"); if (null != mWakeLock) { mWakeLock.release(); mWakeLock = null; L.l(TAG, "电源锁释放成功"); } }
还有一点必须提醒,就是服务的开启,我们知道服务有两种方式启动,一种是startservice()方式启动,这种方式不随着Context的销毁而解除绑定导致服务停止,另一种方式是bindservice()方式,这种方式随着context的销毁而unbindservice,导致服务停止。
我们可以在application类中使用startservice启动所需的服务,然后到需要绑定该服务的Activity中使用bindservice再次绑定该服务,activity销毁时再unbindservice服务,此时并不会stopservice,除非显式调用stopservice方法才会导致服务停止。使用这中方法可以尽可能的提高服务的优先级,使服务一直在后台运行。