Android如何在循环中经过一段时间后调用函数

时间:2013-11-28 11:21:29

标签: android handler runnable

我是Android编程的新手,我曾经编程微控制器,现在我需要你们的一些帮助。 我想在重复调用每个函数后直接调用两个函数,直到按下停止按钮。

btnStart.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //I want perform these series of function repeatedly
                //until stop button pressed
                while(true){
                    bluetoothDisconnect();
                    delay(3000);
                    bluetoothConnect();
                    delay(3000);
                    if(status == true){
                        break;
                    }
                }
            }

        });

        btnStop.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                status = true;

            }

        });

非常感谢,

3 个答案:

答案 0 :(得分:1)

您需要在btnStart中编写代码,否则它将锁定GUI。很抱歉没有更多帮助,我使用Mono(C#)编写Android应用程序,我不确定如何用Java编写。

答案 1 :(得分:0)

试试这个:

  btnStart.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            status = false;

            Thread t = new Thread(new Runnable() {
                @Override
                public void run() {
                    doLoop();
                }
            });

            t.start();
        }

    });

    btnStop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
             status = true;
        }
    });

,其中

 private void doLoop(){
    do {
        bluetoothDisconnect();
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        bluetoothConnect();
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }   while (!status);
}

status是一个全局变量,默认为FALSE (声明为boolean status = false) 此代码作为一个简单的解决方案,但我建议您查看AsyncTask类:  http://developer.android.com/guide/components/processes-and-threads.html

答案 2 :(得分:0)

创建一个处理程序来延迟任务。

创建可运行的线程并运行您的处理程序,如:

Handler mhandler=new Handler();

Runnable  mRunnable=new Runnable() {

                @Override
                public void run() {
                    bluetoothDisconnect(); 
             btnStart.performClick() ; 
                }

    };



btnStart.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            //I want perform these series of function repeatedly
            //until stop button pressed
            while(true){

                bluetoothconnect();
                mhandler.postDelayed(mRunnable,3*1000);
                if(status == true){
                    break;
                }
            }
        }

    });