Handler的概念以及使用

1.在手机开发当中,有很多功能是不能放在Activity上的,比如下载功能不能放在Oncreate,onStart等方法里面,因为这些功能耗时比较长,比如在网上下载一个文件,下载的过程比较长。如果我们把这个下载过程写在activity中,有可能导致整个activity没有反应,给用户比较差的体验。另外如果长时间下载不下来,这个activity也会报错,所以说呢。我们希望把下载啊,处理大量数据这样的一些功能放在一个单独的线程中处理,完成。也就是说,activity是一个线程,下载文件又是另外一个线程,下载文件的那个线程并不影响当前的activity的使用 。这样能让用户感觉更好。(activity一个线程,下载文件Handler又是一个线程,两个线程互不干扰,这叫做消息的异步处理)

2.代码:

public class HandlerActivity extends Activity{
 private Button startButton;
 private Button endButton;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startButton = (Button) findViewById(R.id.startButton);
endButton = (Button)findViewById(R.id.endButton);
/**匿名内部类*/
startButton.setOnClickListener(new StartButtonListener());
endButton.setOnClickListener(new EndButtonListener());
}

/**当点击StartButton时候,立刻将updateThread方法放到消息队列中(同时立刻执行)*/
class
StartButtonListener implements onClickListener{
 public void onClick(View v){

//调用Handler的post方法,将要执行的线程对象添加到队列当中
   handler.post(updateThread);
  }
}

/**当点击EndButton时候,将updateThread方法移除消息队列中*/
class EndButtonListener implements onClickListener{

 public void onClick(View v){
  handler.removeCallbacks(updateThread);
 }
}

/**Handler开辟了一个新的线程*/
 Handler handler = new Handler();

/**当点击StartButton时候,立刻将updateThread方法放到消息队列中(同时立刻执行updateThread,输出updateThread),
然后执行handler.postDelayed(updateThread ,3000);,意思是3000毫米之后,将updateThread 再次放入消息队伍,如此循环*/

//将要执行的操作写在线程对象的run方法当中

Runnable updateThread = new Runnable(){
 public void run(){

//从网上下载一些文件等,网上下载代码暂时省略
 Systenm.out.println("
updateThread");
handler.postDelayed(updateThread ,3000);
}
}


}


猜你喜欢

转载自blog.csdn.net/li_yu_csdn/article/details/79237341