如何定期调用活动中的方法?

时间:2012-04-08 01:45:32

标签: android android-activity

我正在开发一个Android应用程序,我需要定期(每秒几次)从UI线程,Activity类执行一些代码。 我已经看到类似问题Android repetitive task,但我需要的是将我的Activity设置为监听器并以某种方式监听计时器,以便活动每执行一个X毫秒的方法。

这样的事情:

class myActivity extends Activity{
    //things

    //This method must be called every X milliseconds
    private repetitive_method(){
      ....
    }

    //more things
 }

是否有一些推荐的方法可以做到这一点?

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

这可能会有所帮助。请注意,仍然存在竞争条件,在检查它是否为空并且调用runOnUiThread()之间,mActivity可能变为null。

class UpdaterThread extends Thread {
    /** Frequency / sleep duration in milliseconds */
    public static final int FREQUENCY = 250;        
    private volatile boolean mFinished;     
    private Activity mActivity;

    public UpdaterThread(Activity activity) {
        mActivity = activity;
    }

    public void run() {
        while (!mFinished) {
            try {
                if (mActivity != null) {
                    // Your method.
                    mActivity.runOnUiThread(repetitive_method());
                }
                Thread.sleep(FREQUENCY);
            } catch (InterruptedException ignored) {}
        }
    }

    public void quit() {
        mFinished = true;
    }
}

答案 2 :(得分:0)

试试这个......

Timer myTimer;
@Override
protected void onStart() {
    super.onStart();
    myTimer= new Timer();
   //this will update every minute
    myTimer.scheduleAtFixedRate(new UpdateMyTimerTask(), 0,
            60000);

}

public class UpdateMyTimerTask extends TimerTask {

    @Override
    public void run() {
        //your method
         printAndroidLabel();
    }

}

@Override
protected void onStop() {
    super.onStop();
     //stop timer
    myTimer.cancel();
}

public void printAndroidLabel(){
    System.out.println("Hi Android!");
}