计时器来安排任务

时间:2013-09-10 09:40:44

标签: java android timer bluetooth handler

我需要不断检查变量的值。这是我从蓝牙输入流中收到的值,这就是为什么我需要连续检查它的原因。

我还需要做的是,当我调用该函数时,它会在那一刻向我返回保存在变量中的值。

为此,我这样做:

private final Handler refresh_handler = new Handler();

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    Runnable refresh_input = new Runnable() {
        @Override
        public void run() {
            bt_read_input = GlobalVar.bt_input;  //Save received value in a local variable
            refresh_handler.postDelayed(refresh_input, 500);
        }
    };
}

refresh_handler.post(refresh_input);  //Call to the function

这似乎每0.5秒刷新一次变量。但是当我调用它时,我仍然需要它,它会返回实际变量的值,这是bt_read_input在那一刻的值。

我如何实现一个函数来执行此操作作为计时器,还可以返回变量的值以在需要时获取它?

2 个答案:

答案 0 :(得分:0)

试试这种方式

1)创建一个名为BloothListener.java的界面

public interface BloothListener {
        void onReadValue(String value);
    }

2)创建函数说startListing

public void startListing(final BloothListener bloothListener){

        final Handler mHandler = new Handler();
        try{
            final Timer t = new Timer();
            t.schedule(new TimerTask() {

                @Override
                public void run() {
                    final String bt_read_input = GlobalVar.bt_input;
                    mHandler.post(new Runnable() {

                        @Override
                        public void run() {
                            bloothListener.onReadValue(bt_read_input);
                        }
                    });
                }
            }, 0, 500);
        }catch (Exception e) {
        }

    }

3)如何使用您的活动onCreate()方法

startListing(new BloothListener() {

            @Override
            public void onReadValue(String value) {
                // get your value and use it

            }
        });

答案 1 :(得分:0)

我终于以一种非常简单的方式实现了这个目标:

private final Runnable refresh_input = new Runnable() {

@Override
public void run() {
    bt_read_input = GlobalVar.bt_input;
    }
    refresh_handler.postDelayed(refresh_input, 250);
}

};

这样我每250ms刷新一次变量的值,当我想使用它的值时,我只需要调用bt_read_input