高温固相法制备荧光粉:Android疑问1——Handler的removeCallbacks方法无效?(已经明白...

来源:百度文库 编辑:九乡新闻网 时间:2024/04/26 08:27:10
Android疑问1——Handler的removeCallbacks方法无效?(已经明白了)分类: Android笔记 2011-07-24 08:42 265人阅读 评论(5) 收藏 举报

 

  刚在做复习时发现了一个问题,加入了Handler的线程,即使调用了removeCallbacks线程还是存在,而且退出了Activity之后线程还在运行。难道是removeCallBacks无效?还是我哪里写错了?


 

view plaincopy to clipboardprint?
  1. package cfuture09.handlerProgress;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.os.Handler;  
  6. import android.os.Message;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.widget.Button;  
  10. import android.widget.ProgressBar;  
  11.   
  12. public class HandlerProgressActivity extends Activity {  
  13.       
  14.     Button start;  
  15.     ProgressBar progressBar;  
  16.     Handler handler = new Handler() {  
  17.   
  18.         @Override  
  19.         public void handleMessage(Message msg) {  
  20.             // TODO Auto-generated method stub   
  21.             progressBar.setProgress(msg.arg1);  
  22.             handler.post(r);  
  23.         }  
  24.   
  25.     };  
  26.       
  27.     Runnable r = new Runnable() {  
  28.           
  29.         int i = 0;  
  30.         @Override  
  31.         public void run() {  
  32.             // TODO Auto-generated method stub   
  33.             System.out.println("Begin thread");  
  34.             i += 10;  
  35.             Message msg = handler.obtainMessage();  
  36.             msg.arg1 = i;  
  37.             try {  
  38.                 Thread.sleep(1000);  
  39.             } catch (InterruptedException e) {  
  40.                 // TODO Auto-generated catch block   
  41.                 e.printStackTrace();  
  42.             }  
  43. //          if ( i < 100) {    
  44.                 handler.sendMessage(msg);  
  45. //          }   
  46.             if ( i >= 100) {  
  47.                 handler.removeCallbacks(r);  
  48.                 System.out.println("end");  
  49.             }  
  50.         }  
  51.     };  
  52.       
  53.     /** Called when the activity is first created. */  
  54.     @Override  
  55.     public void onCreate(Bundle savedInstanceState) {  
  56.         super.onCreate(savedInstanceState);  
  57.         setContentView(R.layout.main);  
  58.         start = (Button) findViewById(R.id.start);  
  59.         progressBar = (ProgressBar) findViewById(R.id.progress);  
  60.         start.setOnClickListener(new OnClickListener() {  
  61.               
  62.             @Override  
  63.             public void onClick(View v) {  
  64.                 // TODO Auto-generated method stub   
  65.                 progressBar.setVisibility(ProgressBar.VISIBLE);  
  66.                 handler.post(r);  
  67.             }  
  68.         });  
  69.     }  
  70. }  

  刚和一个同学聊天说到这一段,跟他一说,忽然之间自己想明白了。原来还是代码的逻辑错误。这段代码我是看视频写的,可能视频的作者在写这段代码时也没注意到这个问题。在看了之后的视频我才想明白。聊天记录用图片贴上来吧。