Android studio java线程无法正常工作

时间:2017-08-14 10:16:37

标签: java android threat-model

我的Android应用程序中有一个切换按钮。 我创建了一个随机闪烁的线程。我在开关按钮打开时放置一个启动方法,并在按钮关闭时中断该方法。它第一次工作,但第二次触摸开关按钮时,应用程序自动结束。我按下按钮然后随机闪烁工作然后我停止按钮并且闪烁停止但是当我再次使用按钮启动它时,应用程序会自动停止。

xx=new Runnable()
    {
        @Override
        public void run()
        {
            synchronized (this)
            {
                while (true)
                {
                    try {


                        parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
                        camera.setParameters(parameters);
                        camera.stopPreview();

                        c1.sleep(100);
                        parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
                        camera.setParameters(parameters);
                        camera.startPreview();
                        //c1.interrupt();


                    }
                    catch (Exception e)
                    {
                        Thread.currentThread().interrupt();
                        break; //this is a MUST

                    }

                }
            }
            }
        //}

    };


    c1 =new Thread(xx);

   s1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (s1.isChecked())

            {
                c1.start();
            }
            else
            {
                c1.interrupt();

            }

        }

    });

1 个答案:

答案 0 :(得分:0)

为什么你需要在使用它时使用synchronized来阻止资源,所以没有人会再次使用它,直到它被监听器释放 你可以保持同步但至少停止 而不是在使用标志时为真,当按钮关闭时使其为假:)

// set this to true to stop the thread
  volatile boolean shutdown = false;

你也需要在catch中使用停止线程,所以不要让它停止app:)

catch (InterruptedException e) {
              // good practice
              Thread.currentThread().interrupt();
              return;
      }