当前位置: 代码迷 >> Android >> Android线程小结笔记(2)——Handler与Runnable
  详细解决方案

Android线程小结笔记(2)——Handler与Runnable

热度:57   发布时间:2016-05-01 11:12:20.0
Android线程总结笔记(2)——Handler与Runnable

         这是android中实现子线程的另外一个主要的方法,Handler是子线程消息管理着,位于主线程中,用来更新UI,Runnable中的run()函数是子线程,可以在运行过程中发送消息,通知Handler更新UI。下面直接上代码吧,注释还是比较详细的。

     主要就是点击按钮,开启子线程,然后执行5次,退出。

     

public class ThreadStudy_HandleActivity extends Activity {    /** Called when the activity is first created. */	private Button button;	private MyHandle myHandler;	//	private MyThread myThread;	//子线程    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                button = (Button)findViewById(R.id.button1);        button.setOnClickListener(new Button.OnClickListener(){        	@Override        	public void onClick(View v){        		myHandler = new MyHandle();	//初始化myHandler        		myThread = new MyThread();	//初始化myThread        		new Thread(myThread).start();	//启动子线程        	}        });            }        //定义新线程类(子线程)    class MyThread implements Runnable {         public void run() {        	 //        	 Looper.prepare();  //创建本线程的消息循环队列并初始化        	         	 if (!Thread.currentThread().isInterrupted()) {  //如果线程没有中断        		 for(int i=0;i<5;i++){           		             		 Message message = new Message();	 //新建Message对象            		             		 Bundle bundle = new Bundle();	//新建数据传输对象            		 bundle.putString("Str", "线程运行"+i+"次");	//写入要传输的值            		 bundle.putInt("Value", i*10);            		             		 message.setData(bundle);	//与Message捆绑一起            		             		 ThreadStudy_HandleActivity.this.myHandler.sendMessage(message); 	//发送Message,由前边定义的handleMessage函数进行接收            		             		 try {            			 Thread.sleep(5000);  //休眠5000ms,模拟耗时操作            		} catch (InterruptedException e) {             			Thread.currentThread().interrupt();             		}         		 }        		               }        	 //        	 Looper.loop();	//开始运行消息队列         }     }            //定义更新界面的操作,位于主线程    @SuppressLint("HandlerLeak")	class MyHandle extends Handler{    	//必须实现下函数,对子线程传输的数据进行处理    	public void handleMessage(Message msg) {    		Bundle bundle = msg.getData();	//获取子线程传来的数据    		String str = bundle.getString("Str");    		int value = bundle.getInt("Value");    		//显示    		Toast.makeText(ThreadStudy_HandleActivity.this,"str:" + str + "\nvalue:" +value, Toast.LENGTH_SHORT).show();    		super.handleMessage(msg);        }     }}
 

        这个实现了基本的Handler与Runnable的配合,其中还有很多的应用方式,在接下来的总结中继续进行。


    这里有两篇好文章,分享一下连接:

    http://www.cnblogs.com/codingmyworld/archive/2011/09/14/2174255.html

    http://mindtherobot.com/blog/159/android-guts-intro-to-loopers-and-handlers/

  

  相关解决方案