2017-08-14 128 views
-1

我在我的android應用程序中有一個開關按鈕。 我做了一個工作隨機閃爍的線程。當開關按鈕打開時,我啓動了Start方法,並在按鈕關閉時中斷了方法。它第一次工作,但第二次當我觸摸開關按鈕時,應用程序自動結束。我按下按鈕,然後隨機閃爍的工作,然後停止按鈕,閃爍停止,但當我用按鈕再次啓動時,應用程序自行停止。Android工作室java線程無法正常工作

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

      } 

     } 

    }); 

回答

0

爲什麼你需要使用同步時,u使用它,它阻止了資源,所以沒有人會再次使用它,直到它通過U可以保持同步監聽 釋放,但至少停止 ,而不是真正在同時使用標誌當按鈕關閉使假:)

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

也u需要在抓使用,停止線程,以便不使之停止的應用程序:)

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

Assalam ualikum Shaaban兄弟...我解僱了我的代碼同步並使用catch(InterruptedException e){ //最佳實踐 Thread.currentThread()。interrupt(); return; } ..........但它並沒有解決問題... – anik

+0

使用標誌並保持一切,因爲它是 volatile boolean shutdown = false; .... while(!shutdown){ ... –

+0

它不起作用brather – anik