Android:一段时间后“自动刷新”

时间:2013-06-14 16:50:45

标签: java android multithreading runnable

我已经搜索了如何为我的程序执行“自动刷新”或runnable方法,我看到一些关于处理程序和线程的帖子...... 我认为我搜索的是一个线程,但我不能让程序工作...... 让我给你看一些代码:

refresh.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            getUrlText();
            if (time.getText().toString().equals("")
                    || time.getText().toString().equals("0")) {
                mins = 0;
            } else {

                mins = Integer.parseInt(time.getText().toString());
                setTimer(mins);
                t.start();


            }

        }

        private void setTimer(int mins) {
            miliSecTime = mins * 60 * 1000;

        }
    });

    t= new Thread() {
        @Override
        public void run() {
            long start = System.currentTimeMillis();

            while (true) {
                long time = System.currentTimeMillis() - start;
                int seconds = (int) (time / 1000);
                if (seconds > miliSecTime) {
                    getUrlText();
                    start = System.currentTimeMillis();

                }
            }
        }
    };
}

所以,这部分代码应该从用户那里得到一个数字,然后执行getUrlText();每隔x分钟,其中x是用户输入的数字...... 我的问题应该是在运行但我无法弄清楚是什么... 提前感谢您的帮助:)

3 个答案:

答案 0 :(得分:9)

这是一种方法。

在您的活动中声明这些:

Handler handler = new Handler();
Runnable timedTask = new Runnable(){

    @Override
    public void run() {
        getUrlText();
        handler.postDelayed(timedTask, 1000);
    }};

然后设置你的onClick:

button.setOnClickListener(new OnClickListener() {

    @Override
        public void onClick(View v) {
            getUrlText();
            handler.post(timedTask);
        }
    });

这将每1000毫秒执行timedTask。根据需要增加此数字。

我不确定您使用mins等做了什么,但将需要定期执行的所有逻辑放入timedTask Runnable。希望这是有道理的。

答案 1 :(得分:6)

您可以使用此代码实现自动刷新活动一段时间,如下所示。

首先,您可以使用标题名称空间,如下所示。

import android.os.Handler;

创建Handler的新实例。

    private final Handler handler = new Handler();

然后编写一个刷新方法,如下所示,调用OnCreate方法范围,这里我用了5000毫秒或5秒。你可以随意改变。

private void doTheAutoRefresh() {
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
             // Write code for your refresh logic
            doTheAutoRefresh();
        }
    }, 5000);
}

自动刷新的put方法的最终代码如下。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    doTheAutoRefresh();
}

答案 2 :(得分:2)

<强> 1。创建处理程序

Handler handler = new Handler();

<强> 2。创建Runnable对象

public final Runnable runnable = new Runnable() {

    @Override
    public void run() {
        // your code while refreshing activity
    }
};

第3。处理程序对象的调用方法

handler.postDelayed(runnable, 3000);

// 3000是以毫秒为单位的时间

//将此方法放在onCreate()

// onResume()或进行刷新的地方