0

スレッドを使用して懐中電灯を実行していますが、バックが押された後にそのスレッドを停止したいと考えています。

次のコードを使用してスレッドを開始しました。

progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("Flashing...");
progressDialog.show();

thread = new Thread(MainActivity.this);
thread.start();

そして、スレッドはやっています:

public void run() {
    isOn = false;
    cam = Camera.open();
    p = cam.getParameters();
    try {
        for (int i = 0; i < pattern.length; i++) {
            if (isOn) {
                p.setFlashMode(Parameters.FLASH_MODE_OFF);
                cam.setParameters(p);
                Thread.sleep(pattern[i]);
                isOn = false;
            } else {
                p.setFlashMode(Parameters.FLASH_MODE_TORCH);
                cam.setParameters(p);
                Thread.sleep(pattern[i]);
                isOn = true;
            }
        }
    }
    catch (InterruptedException e) {
        e.printStackTrace();
    }
    cam.release();
    handlerFinish.sendEmptyMessage(0);
}

private Handler handlerFinish = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        progressDialog.dismiss();
    }
};

これを停止しようとしましたが、進行状況ダイアログが閉じられているだけで、懐中電灯はまだ機能しています:

@Override
public void onBackPressed() {
    super.onBackPressed();
    p.setFlashMode(Parameters.FLASH_MODE_OFF);
    cam.setParameters(p);
    isOn = false;
    thread.stop();
}

目標を達成するにはどうすればよいですか (戻るボタンを押した後、スレッドと懐中電灯を停止します)。

4

1 に答える 1

0

このループを試してスレッドを停止してください

 boolean retry = true;

  while (retry) {

 try {

  thread.join();

   retry = false;

  } catch (InterruptedException e) {

  // try again shutting down the thread

  }

  }
于 2012-09-01T10:52:51.790 に答える