我有一个定期向服务器发送数据的应用程序。我想知道使用电池的最佳做法是什么。
我应该在发送数据后停止服务(调用stopSelf()
),还是等到下次调用startService()
时才停止服务,这样就不会再次调用onCreate()
和onDestroy()
等方法。
服务呼叫之间的时间间隔大约为1分钟
这里的最佳实践是使用JobScheduler进行此类工作。它已经针对电池使用情况进行了优化,可以批处理作业,还有很多其他优化。
这里有一个例子:
ComponentName serviceName = new ComponentName(context, YourDataSyncService.class);
JobInfo jobInfo = new JobInfo.Builder(JOB_ID, serviceName)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
.setPeriodic(60000) //1 min
.build();
JobScheduler scheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
int result = scheduler.schedule(jobInfo);
if (result == JobScheduler.RESULT_SUCCESS) Log.d(TAG, "Job scheduled successfully!");
在这种情况下,您不需要让服务继续运行。
如果您的API级别为<21,然后请检查FireBase作业调度程序
此外,如果你的服务应该只在你的应用程序和服务器之间同步数据,你可以检查SyncAdapter,它是专门为此设计的。