您好我希望每15分钟更新一次在后台运行的服务,特别是在15分钟的当前时间内。
服务
public class UpdateService extends IntentService {
public UpdateService() {
super("UpdateService");
}
// will be called asynchronously by Android
@Override
protected void onHandleIntent(Intent intent) {
updateFragmentUI();
}
private void updateFragmentUI() {
this.sendBroadcast(new Intent().setAction("UpdateChart"));
}
}
答案 0 :(得分:1)
使用Alarm Manger或Job Scheduler启动服务 看看这个链接..
How to start Service using Alarm Manager in Android?
对于你我建议使用setExact而不是setRepeating。 这是代码......
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
int ALARM_TYPE = AlarmManager.RTC_WAKEUP;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
am.setExact(ALARM_TYPE, calendar.getTimeInMillis(), pendingIntent);
else
am.set(ALARM_TYPE, calendar.getTimeInMillis(), pendingIntent);
请记住,setExact不提供重复功能,因此每次您必须再次从服务中设置它...并且第一次从您的活动中延迟10分钟。并在服务中延迟15分钟(根据您的使用案例)。
答案 1 :(得分:1)
使用Jobscheduler
,您可以使用.setPeriodic(int millis)
答案 2 :(得分:0)
我遇到了同样的问题,我使用了Handler
postDelay
的递归函数。
解决方案:
public class UpdateService extends Service {
Handler handler = new Handler();
public UpdateService() {
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
handler.postDelayed(new Runnable() {
public void run() {
/*
* code will run every 15 minutes
*/
handler.postDelayed(this, 15 * 60 * 1000); //now is every 15 minutes
}
}, 0);
return START_STICKY;
}
}