【问题标题】:How to periodically call a Method in an Activity?如何定期调用 Activity 中的方法?
【发布时间】:2014-02-21 23:36:43
【问题描述】:

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

类似这样的:

class myActivity extends Activity{
    //things

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

    //more things
 }

有什么推荐的方法吗?

【问题讨论】:

    标签: android android-activity


    【解决方案1】:
    【解决方案2】:

    这可能会有所帮助。请注意,在检查是否为 null 和调用 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;
        }
    }
    

    【讨论】:

    • 当然可以,但是 Timer 和 Handler 类提供了有趣的方法,特别是与 UI 线程交互,因此是最常见的实现。
    【解决方案3】:

    试试这个...

    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!");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 2019-03-24
      • 2021-06-08
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      相关资源
      最近更新 更多