0

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

像这样的东西:

class myActivity extends Activity{
    //things

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

    //more things
 }

有一些推荐的方法来做到这一点吗?

4

3 回答 3

2

你的答案在那里:

http://developer.android.com/resources/articles/timed-ui-updates.html

于 2012-04-08T02:22:01.547 回答
0

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

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;
    }
}
于 2012-04-08T05:54:20.283 回答
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!");
}
于 2014-02-21T15:01:36.987 回答