使用Handler管理线程(转)
步骤:
1. 申请一个Handler对象
Handler handler = new Handler();
2. 创建一个线程
{继承Thread类或者实现Runnable这个接口}
使用Runnable创建一个内部匿名类对象updateThread(要复写run方法)
3. 使用handler的post方法将线程加入到线程队列中
handler.post(updateThread);
4. 使用handler的removeCallbacks方法移出updateThread线程
注意:如果线程从线程队列中出来被执行后,则队列中就不在有线程
因此如果线程在被执行后没有方法将其再次加入到队列中,则无需使用removeCallbacks
线程走出线程队列有两种情况:
一种是被执行,此时要执行run方法
一种是使用removeCallbacks方法,此时线程不被执行,因此不调用run
5. 使用handler的postDelayed方法延时将线程加入到队列中
handler.postDelayed(updateThread,3000)
以下代码是MainActivity.java中的代码
package com.example.handler;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity { //声明两个按钮控件 private Button StartButton = null; private Button EndButton = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //根据控件的ID得到代表控件的对象,并为这两个按钮设置相应的监听器 StartButton = (Button)findViewById(R.id.StartButton); StartButton.setOnClickListener(new StartButotnListener()); EndButton = (Button)findViewById(R.id.EndButton); EndButton.setOnClickListener(new EndButtonListener()); } class StartButotnListener implements OnClickListener{ @Override public void onClick(View v) { // TODO Auto-generated method stub handler.post(updateThread); } } class EndButtonListener implements OnClickListener{ @Override public void onClick(View v) { // TODO Auto-generated method stub handler.removeCallbacks(updateThread); } } //创建一个Handler对象 Handler handler = new Handler(); //将要执行的操作下载线程对象的run方法当中 Runnable updateThread = new Runnable(){ public void run(){ System.out.println("UpdateThread"); //在run方法内部,执行postDelayed或者是post方法 handler.postDelayed(updateThread,3000); } };}
以下代码是activity_main.xml中的代码