Android定期运行任务

Sul*_*dat 19 android android-manifest android-layout

我想在android活动中定期运行一个方法,在x秒后更新某个字段.我知道它可以在timerTask中完成但是最好的方法是什么?代码示例会很有帮助.

ina*_*ruk 19

你应该使用Handler它的postDelayed功能.你可以在这里找到例子:延迟重复任务?


Raj*_*h.k 11

您可以使用以下 android 类:

1.Handler

Handler handler=new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {

                  //your code
                   handler.postDelayed(this,20000); 
                    }
                },20000);
Run Code Online (Sandbox Code Playgroud)

2.报警管理器

AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);


            // Set the alarm to start at approximately 2:00 p.m.
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());

            Intent intent = new Intent(HomeActivity.this, Yourservice.class);
            alarmIntent = PendingIntent.getService(HomeActivity.this, 0, intent, 0);
            alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 600*1000, alarmIntent);
Run Code Online (Sandbox Code Playgroud)


Dal*_*iya 5

您也可以通过 CountDownTimer 来完成

CountDownTimer countDownTimer;

 public void usingCountDownTimer() {
        countDownTimer = new CountDownTimer(Long.MAX_VALUE, 10000) {

            // This is called after every 10 sec interval. 
            public void onTick(long millisUntilFinished) {              
                setUi("Using count down timer");
            }

            public void onFinish() {              
                start();
            }
        }.start();
    }
Run Code Online (Sandbox Code Playgroud)

和 onPause()

@Override
    protected void onPause() {
        super.onPause();
        try {
            countDownTimer.cancel();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
Run Code Online (Sandbox Code Playgroud)