Android:一段时间后"自动刷新"

Joã*_*lva 6 java multithreading android 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();

                }
            }
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

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

Ken*_*olf 9

这是一种方法.

在您的活动中声明这些:

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

    @Override
    public void run() {
        getUrlText();
        handler.postDelayed(timedTask, 1000);
    }};
Run Code Online (Sandbox Code Playgroud)

然后设置你的onClick:

button.setOnClickListener(new OnClickListener() {

    @Override
        public void onClick(View v) {
            getUrlText();
            handler.post(timedTask);
        }
    });
Run Code Online (Sandbox Code Playgroud)

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

我不确定你在做什么mins等等,但是把你需要定期执行的所有逻辑都放到了timedTask Runnable.希望有道理.


Tec*_*lsa 6

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

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

import android.os.Handler;
Run Code Online (Sandbox Code Playgroud)

创建新实例后Handler.

    private final Handler handler = new Handler();
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

    doTheAutoRefresh();
}
Run Code Online (Sandbox Code Playgroud)