如何让runOnUiThread在Android中持续运行

时间:2015-09-28 10:49:15

标签: android loops while-loop

使用Android工作室,我正在尝试制作一个应用程序,该应用程序从Web服务获取数据并显示数据并每5秒更新一次视图,或者当Web服务上的数据发生更改时。有了这个,我试图根据int更改某些按钮的颜色, int 更改,当我将buttons();应用到另一个按钮时,按钮上的颜色会发生变化然后按下它但我希望它自己更新。

当我使用while循环时,应用程序卡住了

MainActivity.this.runOnUiThread(new Runnable() {
        @Override
        public void run() {

          buttons();

        }
    });

runOnUiThread位于onCreate

2 个答案:

答案 0 :(得分:1)

在UI线程上使用run会导致UI冻结,请尝试使用计时器任务。 例如:

 @Override
    public void StopTimerTask() {
        if (timer != null) {
            timer.cancel();
            timer = null;
        }
    }

    public void StartTimer() {
        timer = new Timer();
        initializeTimerTask();
        int UpdateTime = Integer.valueOf(UserSettings.getString("Update", "60000"));
        timer.schedule(doAsynchronousTask, 0, YOURTIME);
    }
   public void initializeTimerTask() {

        doAsynchronousTask = new TimerTask() {
            @Override
            public void run() {
                myHandler.post(new Runnable() {
                    public void run() {
                        YOUR LOGIC HERE 
                    }
                });
            }
        };

    }

答案 1 :(得分:0)

这样做,你只是把另一个类放入主要活动是成功的唯一的问题是它必须在我的主类

 public class updategui extends TimerTask {
                Activity context;
                Timer timer;

                public updategui(Activity context, int seconds) {
                    this.context = context;
                    timer = new Timer();
                    timer.schedule(this,
                            seconds * 1000,  // initial delay
                            seconds * 1000); // subsequent rate
                }

                @Override
                public void run() {
                    if(context == null || context.isFinishing()) {
                        this.cancel();
                        return;
        }

        context.runOnUiThread(new Runnable() {
            @Override
            public void run() {

                try {
                    buttons();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }}