8

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

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 是用户输入的数字...我的问题应该在运行中,但我不知道是什么...提前感谢您的帮助:)

4

3 回答 3

10

这是一种方法。

在您的活动中声明这些:

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

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

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

于 2013-06-14T17:08:20.323 回答
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();
}
于 2016-07-31T16:14:06.627 回答
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对象的调用方法

handler.postDelayed(runnable, 3000);

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

// 将此方法放入 onCreate()

// onResume() 或刷新发生的地方

于 2015-03-11T04:40:18.507 回答