-1

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

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

            }

        }

    });
4

1 回答 1

0

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

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

你还需要在 catch 中使用来停止线程,所以不要让它停止应用程序:)

catch (InterruptedException e) {
              // good practice
              Thread.currentThread().interrupt();
              return;
      }
于 2017-08-14T10:39:02.673 回答