【发布时间】:2017-11-10 13:45:55
【问题描述】:
我正在做一个需要频繁发送其位置的 Android 应用,最多每 1 分钟或 2 分钟发送一次。为此,我使用JobSchedulerService。通过将.setPeriodic() 替换为.setMinimumLatency(),我已经设法让它在Android N version 的设备上每15 分钟运行一次以上。事实是,一开始它会在规定的时间内定期执行,但一段时间后它大约每 7 或 9 分钟运行一次。
我已经将该应用程序包含在省电白名单中,但没有工作。有没有什么方法可以不受限制地每分钟执行一次或类似的服务?与应用消耗多少电量无关。
编辑:
这是我尝试过的:
接收服务:
public class ReceiverService extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context ctx, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
if (!isMyServiceRunning(ServiceBackground.class, ctx))
startWakefulService(ctx, new Intent(ctx, ServiceBackground.class));
new ServiceAlarmManager(ctx).register();
}
}
private boolean isMyServiceRunning(Class<?> serviceClass,Context context) {
ActivityManager manager = (ActivityManager)context. getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
Log.i("Service already","running");
return true;
}
}
Log.i("Service not","running");
return false;
}
}
ServiceAlarmManager和@madking说的一模一样。
【问题讨论】:
-
这是非常糟糕的做法。请让设备休眠。
-
你想要的都是不可能的
-
这不可能,我不在乎这是不是一个糟糕的做法,因为设备会充电,优先级是每分钟发送一次位置,而不是电池
-
也许你没有注意到谷歌是如何对应用程序的功能以及每次更新的频率施加更多限制的。但是请告诉我该怎么做,因为你似乎知道一些我不知道的事情
-
我当然不是专家,我从中了解到新的限制是针对 Android O 的,对吧?我认为它必须是一种方法,例如前台服务或其他东西,但我不知道......
标签: android service periodic-task