Como parar esse segmento no android?
Na minha aplicação eu estou usando este segmento para girar o ponteiro dos segundos no relógio. Mas o problema é enquanto eu fechar a atividade, o segmento ainda está em execução. Eu quero parar o fio para que ele não possa afetar o Bettry do dispositivo.
Abaixo está o meu código de atividade, onde eu estou girando a segunda mão do relógio:
<code> public class ClockActivity extends Activity implements OnClickListener{ private Button chimeBtn; private ImageView img; private Thread myThread = null; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.clock_layout); Runnable runnable = new CountDownRunner(); myThread = new Thread(runnable); myThread.start(); chimeBtn = (Button) findViewById(R.id.chimeBtn); chimeBtn.setOnClickListener(this); } @Override public void onClick(View v) { switch(v.getId()){ case R.id.chimeBtn: playSound(R.raw.one_bell); break; } } public void playSound(int resources){ MediaPlayer mp = MediaPlayer.create(getApplicationContext(), resources); mp.start(); } private void doPlay(){ new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub Log.v("log_tag", "this is seocond thread"); } }).start(); } public void doRotate() { runOnUiThread(new Runnable() { public void run() { try { Date dt = new Date(); int hours = dt.getHours(); int minutes = dt.getMinutes(); int seconds = dt.getSeconds(); String curTime = hours + ":" + minutes + "::" + seconds; Log.v("log_tag", "Log is here Time is now" + curTime); img = (ImageView) findViewById(R.id.imgsecond); RotateAnimation rotateAnimation = new RotateAnimation((seconds - 1) * 6, seconds * 6, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f); rotateAnimation.setInterpolator(new LinearInterpolator()); rotateAnimation.setFillAfter(true); img.startAnimation(rotateAnimation); } catch (Exception e) { Log.e("log_tag", "Error msg is " + e.toString()); } } }); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { System.out.println("Back Key Press"); if (myThread != null) { myThread.interrupt(); //says that the myThread should stop try{ myThread.join(); //make this myThread wait for the other myThread to finish before returning myThread = new Thread(); myThread = null; }catch(InterruptedException ie){ //handle the case if the thread.join is interrupt //don't know if this will ever happen, if it can... throw a runtime exception?, or reinterrupt? Thread.currentThread().interrupt(); // reinterrupt because thrown exception cleared interrupt and hope it's handled elsewhere } } System.out.println("Back Key Press"); return true; } return super.onKeyDown(keyCode, event); } @Override public void onDestroy(){ System.out.println("OnDestroy"); super.onDestroy(); } class CountDownRunner implements Runnable { // @Override public void run() { while (!Thread.currentThread().isInterrupted()) { try { // Log.v("log_tag", "Roate is going"); doRotate(); Thread.sleep(1000); //doPlay(); } catch (InterruptedException e) { // Thread.currentThread().interrupt(); } catch (Exception e) { Log.e("log_tag", "Error is " + e.toString()); } } } } } </code>
Desde já, obrigado.