如何每15分钟每15分钟运行一次Android服务?

时间:2017-03-26 08:03:02

标签: android

您好我希望每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"));
    }
}

3 个答案:

答案 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;
   }
}