2017-08-14 262 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