引用Accelerometer seems to only work for a few seconds?
我正在使用 BOOT_COMPLETED 广播事件来调用以下内容:
public class OnBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, ShakeEventService.class);
context.startService(service);
}
}
这又称为:
public class ShakeEventService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
sManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensor = sManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sManager.registerListener(thisSensorEventListener, sensor, SensorManager.SENSOR_DELAY_NORMAL);
return Service.START_STICKY;
}
}
该类中还有许多其他功能,显然,从技术上讲,一切正常,除了无论我返回什么标志(START_STICKY、START_STICKY_COMPATIBILITY、START_NOT_STICKY 或 START_REDELIVER_INTENT),该服务在两者之间的任何位置之后被终止5 和 25 分钟,直到下次启动时才会重新启动。
我已经阅读了很多关于 Android 4.2 引入新的电池优化来终止后台进程的信息,并且我已经阅读了 START_STICKY 不再工作的各种错误报告,但是各种变通方法似乎没有任何效果我的情况有所不同。不确定我是否试图错误地实现它们,或者这些解决方法是否刚刚在更新的版本中停止工作。我的测试设备运行的是 5.1.1。
我在这里有点不知所措,请再次感谢您的帮助。
编辑 对于遇到此问题的任何其他人,下面接受的答案包括一个有效的唤醒锁,它使服务在运行 Android 5.1.1 的 Nexus 7 和运行 Android 6 的 LG G4 上保持 Activity 状态。
此外,在 list 文件的 android:process 属性前加上冒号似乎对于保持唤醒锁就位很重要。引用 http://developer.android.com/guide/topics/manifest/service-element.html
虽然在运行相同 Android 5.1.1 的三星 S6 Edge 上仍然没有运气,所以看起来三星在他们的电池优化中实现了一些导致过早死亡的东西..
最佳答案
要拥有一个持续存在的服务,您所要做的就是:
<!-- BackGroundService Service -->
<service
android:name="com.settings.BackgroundService"
android:enabled="true"
android:exported="false"
android:process=":my_process" />
2) onStartCommand 应该返回:
return Service.START_STICKY;
这就是我从一整天都在运行的主要 Activity 中启动服务后的全部内容/
关于android - 在 Android 上保持后台服务活跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35393097/