参考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。
我在这里有点不知所措,请再次感谢一些帮助。
EDIT 对于遇到这个问题的其他人来说,下面接受的答案包括一个工作的唤醒锁,它可以让运行Android 5.1.1的Nexus 7和运行Android 6的LG G4保持服务。
此外,使用冒号为清单文件的android:process属性添加前缀对于保持wakelock到位似乎很重要。参考http://developer.android.com/guide/topics/manifest/service-element.html
虽然运行相同的Android 5.1.1的三星S6 Edge仍然没有运气,所以看起来三星在他们的电池优化中实施了导致过早杀死的东西..
答案 0 :(得分:3)
要想拥有一个充满活力的服务,你所要做的就是:
<!-- BackGroundService Service -->
<service
android:name="com.settings.BackgroundService"
android:enabled="true"
android:exported="false"
android:process=":my_process" />
2)onStartCommand应返回:
return Service.START_STICKY;
在我从主要活动开始服务一整天后,所有伙伴都是
答案 1 :(得分:2)
您需要对服务使用部分Wakelock。如果您的服务是与用户交互的,您可以考虑使服务成为前台。
这是Partial Wakelock的一个工作示例:
启动服务时使用此功能:
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock cpuWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
cpuWakeLock.acquire();
当服务停止时,请拨打cpuWakeLock.release();
导入android.support.v4.content.WakefulBroadcastReceiver Android Studio告诉我不存在。
您需要为此导入support library。
答案 2 :(得分:0)
要使用JobScheduler和JobService,您可以定期执行代码。
首先创建一个扩展JobService的类,然后实现所需的方法并添加服务代码/从JobService onStartJob ()方法中启动另一个服务。
以下是定期执行JobService操作的示例:
self.inventory['weapons'].append(CreateWeapon.generate())
您可以在此处找到更多信息: https://developer.android.com/reference/android/app/job/JobService.html
祝你好运!