首页

源码搜藏网

首页 > 安卓源码 > 技术博客 >

Android实现后台Service服务一直存在的解决思路

创建时间:2017-06-13 17:34  浏览

解决方法:
       在启动service的时候,获取电源设备锁,等到停止服务的时候释放电源设备锁。 
       这个方法需要权限: 
      < 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方法才会导致服务停止。使用这中方法可以尽可能的提高服务的优先级,使服务一直在后台运行。


上一篇:很有用的android模拟按键方法
下一篇:详解Android判断屏幕锁屏的方法

相关内容

热门推荐