2014-04-05 2 views
0

램을 저장하기 위해 특정 응용 프로그램을 실행할 때 시간을 계산하는 앱에서 작업 중입니다. 확인란을 사용하여 일부 스레드를 중지하려고합니다. 내가 스레드가 중지 확인란을 누를 때 나는 명령을 원하는 경우에도 "조건은"잘 "클릭하면 스레드를 사용하지 않음

인 경우 감지 응용 프로그램의 실행 조건 :

if (MainActivity.tgbutton.isChecked()) 
{ 
    if (packageName.equals("com.facebook.katana")) 
    { 

     if (f==1) 
     { 

     } 
     else 
     { 
      // Toast.makeText(getApplicationContext(),"fb on", Toast.LENGTH_SHORT).show(); 
      f=1; 
      facebook = true; 
      startTimef = SystemClock.uptimeMillis(); 
      customHandlerf.postDelayed(updateTimerThreadfacebook, 0); 
     } 
    } 
    else 
    { 
     if(f==1) 
     { 
      //Toast.makeText(getApplicationContext(),"fb off", Toast.LENGTH_SHORT).show(); 

      facebook = false; 
      timeSwapBufff += timeInMillisecondsf; 

      customHandlerf.removeCallbacks(updateTimerThreadfacebook); 
      f=2; 
     } 
    } 
} 

확인란 :

blabla.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 

     if (((CheckBox) v).isChecked()) { 

      // what to write here to disable thread??? 
     } 

    } 
}); 

스레드 자체 :

private Runnable updateTimerThreadfacebook = new Runnable() { 


    public void run() { 


     if (facebook = true) 
     { 
      timeInMillisecondsf = SystemClock.uptimeMillis() - startTimef; 

      updatedTimef = timeSwapBufff + timeInMillisecondsf; 

      int secsf = (int) (updatedTimef/1000); 
      int minsf = secsf/60; 
      secsf = secsf % 60; 

      MainActivity.facebook.setText("" + minsf + ":" + String.format("%02d", secsf)); 

      customHandlerf.postDelayed(this, 0); 

     } 
    } 

}; 
+1

을 중단하려면 내가 어떤 스레드 코드 그러나 여기에서'customHandlerf.removeCallbacks 표시되지 않습니다 (updateTimerThreadfacebook) ;' –

답변

0

Thread 클래스를 사용하여 Runnable 객체를 오버랩합니다.

private Thread updateTimerThreadfacebook = new Thread(new Runnable() { 
     public void run() { 
      if (facebook = true) { 
       timeInMillisecondsf = SystemClock.uptimeMillis() - startTimef; 

       updatedTimef = timeSwapBufff + timeInMillisecondsf; 

       int secsf = (int) (updatedTimef/1000); 
       int minsf = secsf/60; 
       secsf = secsf % 60; 

       MainActivity.facebook.setText("" + minsf + ":" + String.format("%02d", secsf)); 
       customHandlerf.postDelayed(this, 0); 
      } 
     } 
    }); 

사용을 중지하려면 메서드를 사용하십시오.

updateTimerThreadfacebook.interrupt(); 
1
당신이 당신의 실행 방법

public class MyClass implements Runnable{ 
boolean signal=false; 
public setisFinish(boolean sig) 
{ 
    signal = sig; 
} 

@Override 
public void run() 
{ 
    if(!signal) 
    //Do SomeThing 
} 

public void foo() 
{ 
    System.out.println("foo"); 
} 

}

에 당신의 클릭 리스너에 값을 사용한다

blabla.setOnClickListener(new OnClickListener() { 

@Override 
public void onClick(View v) { 

    if (((CheckBox) v).isChecked()) { 

     myThread.setisFinish(true); 
    } 

} 

});

이 코드는 스레드를 다시 시작하고 whant 때마다 당신이 그것을 시작할 수 있습니다 당신이 당신의 스레드 사용이 코드

myThread.interrupt(); 
관련 문제