首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

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

2013-03-22 
Android线程总结笔记(2)——Handler与Runnable这是android中实现子线程的另外一个主要的方法,Handler是子线

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/

  

热点排行