[android]线程中断的替代品吗?

发布时间: 2016/9/13 3:29:29
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

建设一个手电筒 SOS 模式应用程序。有三个按钮 (开启、 关闭和 SOS)。应用程序工作正常打开和关闭模式中但不是在 SOS 模式。(SOS 模式不 switch 关闭)

//this method gets called when Off button is pressed
    private void turnOffFlash() {
            if (FlashOn) {
                if (myCamera == null || myParameters == null) {
                    return;
                }
                myParameters = myCamera.getParameters();
                myParameters.setFlashMode(Parameters.FLASH_MODE_OFF);
                myCamera.setParameters(myParameters);
                myCamera.stopPreview();
                try {
                    if (SOSon)
                        Flashthread.interrupt();
                    SOSon = false;
                } catch (Exception ex) {
                    throw ex;
                }
                FlashOn = false;
                number_of_press=0;
            }
        }

Flashthread 用在这里

void onSOSPress() {
        if (number_of_press == 1) {
            try {
                SOSon = true;
                if (!Flashthread.isInterrupted()) {
                    if (SOSon) {
                        Flashthread = new Thread(new Runnable() {
                            @Override
                            public void run() {
                                for (int i = 0; i < System.currentTimeMillis(); i++) {
                                    if (FlashOn) {
                                        myParameters.setFlashMode(Parameters.FLASH_MODE_OFF);
                                        myCamera.setParameters(myParameters);
                                        FlashOn = false;
                                    } else {
                                        TurnOnFlash();
                                    }
                                    try {
                                        Thread.sleep(1000);
                                    } catch (InterruptedException e) {
                                        e.printStackTrace();
                                    }

                                }
                            }
                        });
                        Flashthread.start();
                    }
                } else
                    Flashthread.resume();
            } catch (Exception ex) {
                throw ex;
            }
        }
    }

turnOffFlash 方法,因为我读以中断方式并不真的"中断"/ 杀死线程,能而不是用什么 Thread.Interrupt(); ,按 Off button 停止 SOS 模式吗? 我试过 stop()destroy() 都撞坏了该应用程序。

解决方法 1:

你应该用的是 Handler 所建议的意见,但如果你想要这个系统,使用标志来告诉您停止的线程︰

boolean shouldStop = false;

...
while (!shouldStop){
  if(FlashOn){
    ...//do SOS stuff
  }
}

...
public void endSOS(){
  shouldStop = true;
}
官方微信
官方QQ群
31647020