Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么线程创建失败?_Android_Multithreading_Wait - Fatal编程技术网

Android 为什么线程创建失败?

Android 为什么线程创建失败?,android,multithreading,wait,Android,Multithreading,Wait,我想在无限循环中打开/关闭闪光灯,所以当它打开时,应该等待5秒,然后关闭,然后等待5秒再次打开,依此类推。。。 我怎么能做到 这是我的密码: b2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated metho

我想在无限循环中打开/关闭闪光灯,所以当它打开时,应该等待5秒,然后关闭,然后等待5秒再次打开,依此类推。。。 我怎么能做到

这是我的密码:

b2.setOnClickListener(new OnClickListener() {

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

                    //  num = Integer.parseInt(n.getText().toString());

                        while(bl){

                             if(camera == null){

                                 new Thread(new Runnable() {
                                        @Override
                                        public void run() {
                                            try {
                                                Thread.sleep(5000);
                                            } catch (InterruptedException e) {
                                                e.printStackTrace();
                                            }
                                            runOnUiThread(new Runnable() {
                                                @Override
                                                public void run() {
                                                    turnOn();
                                                }
                                            });
                                        }
                                    }).start();
                                }

                             else{

                                 new Thread(new Runnable() {
                                        @Override
                                        public void run() {
                                            try {
                                                Thread.sleep(5000);
                                            } catch (InterruptedException e) {
                                                e.printStackTrace();
                                            }
                                            runOnUiThread(new Runnable() {
                                                @Override
                                                public void run() {
                                                    turnOff();
                                                }
                                            });
                                        }
                                    }).start();
                                }
                        }

                    }
                });

尝试类似的方法,使用而不是(丑陋的)线程。sleep():


我建议不要使用
Thread
s来实现这一点。为什么不使用
Runnable
类并通过
处理程序延迟发布它呢?例如:

Handler handler = new Handler(); // make this a member variable of your class
boolean isOn = false; // make this a member variable of your class

final Runnable flashRunnable = new Runnable() {
    @Override
    public void run() {
        if (isOn) {
            turnOff();
            isOn = false;
        } else {
            turnOn();
            isOn = true;
        }
        handler.postDelayed(flashRunnable, 5000);
    }
};

handler.postDelayed(flashRunnable, 5000);

如果您需要在UI线程上的
Runnable
中运行代码,您甚至可以在
视图上调用
postDelayed
,而不是创建
处理程序

您不能在UI线程上放置无限循环,首先,你真的知道线程是做什么的吗?我想你的意思是让有限循环进入线程内部,而不是创建无限多的线程
Handler handler = new Handler(); // make this a member variable of your class
boolean isOn = false; // make this a member variable of your class

final Runnable flashRunnable = new Runnable() {
    @Override
    public void run() {
        if (isOn) {
            turnOff();
            isOn = false;
        } else {
            turnOn();
            isOn = true;
        }
        handler.postDelayed(flashRunnable, 5000);
    }
};

handler.postDelayed(flashRunnable, 5000);