在后台使用 TriggerEventListener 的最佳方式?
Best way to use TriggerEventListener in the background?
我想制作一个 运行 在后台运行的应用程序,记录位置数据,而用户实际上不必在前台安装该应用程序,但同时不会使用太多电池。
我最初想为 BOOT_COMPLETED 和 运行 设置一个 BroadcastReceiver 服务,该服务使用显着运动传感器在它启动时记录位置数据,但自从奥利奥以来,有很多对后台服务的限制。
最好的方法是什么?
您可以使用 JobService
它在电池方面的效率和在后台执行任务的现代方式。
public class YourJobService extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
if (!Utility.isServiceRunning(GetAlertService.class, getApplicationContext())) {
startService(new Intent(getApplicationContext(), GetAlertService.class));
}
jobFinished(params, false);
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
return true;
}
}
你可以像这样按照你想要的方式配置它
ComponentName getAlertJobComponent = new ComponentName(context.getPackageName(), YourJobService.class.getName());
JobInfo.Builder getAlertbuilder = new JobInfo.Builder(Constants.getAlertJobid, getAlertJobComponent);
getAlertbuilder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); // require unmetered network
getAlertbuilder.setRequiresDeviceIdle(true); // device should be idle
getAlertbuilder.setPeriodic(10 * 1000);
getAlertbuilder.setRequiresCharging(false); // we don't care if the device is charging or not
JobScheduler getAlertjobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
getAlertjobScheduler.schedule(getAlertbuilder.build());
有关详细信息,请参阅此 Intelligent Job-Scheduling
我想制作一个 运行 在后台运行的应用程序,记录位置数据,而用户实际上不必在前台安装该应用程序,但同时不会使用太多电池。
我最初想为 BOOT_COMPLETED 和 运行 设置一个 BroadcastReceiver 服务,该服务使用显着运动传感器在它启动时记录位置数据,但自从奥利奥以来,有很多对后台服务的限制。
最好的方法是什么?
您可以使用 JobService
它在电池方面的效率和在后台执行任务的现代方式。
public class YourJobService extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
if (!Utility.isServiceRunning(GetAlertService.class, getApplicationContext())) {
startService(new Intent(getApplicationContext(), GetAlertService.class));
}
jobFinished(params, false);
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
return true;
}
}
你可以像这样按照你想要的方式配置它
ComponentName getAlertJobComponent = new ComponentName(context.getPackageName(), YourJobService.class.getName());
JobInfo.Builder getAlertbuilder = new JobInfo.Builder(Constants.getAlertJobid, getAlertJobComponent);
getAlertbuilder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); // require unmetered network
getAlertbuilder.setRequiresDeviceIdle(true); // device should be idle
getAlertbuilder.setPeriodic(10 * 1000);
getAlertbuilder.setRequiresCharging(false); // we don't care if the device is charging or not
JobScheduler getAlertjobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
getAlertjobScheduler.schedule(getAlertbuilder.build());
有关详细信息,请参阅此 Intelligent Job-Scheduling