好记性不如烂笔杆android学习笔记<七>Handle用法

18,//Handle用法
//创建一个Handler对象

 1 //创建一个Handler对象
 2     Handler handler = new Handler();
 3     //将要执行的操作写在线程对象的run方法当中
 4     Runnable updaterThread = new Runnable(){
 5 
 6         @Override
 7         public void run() {
 8             // TODO Auto-generated method stub
 9             System.out.println("UpdateThread");
10             //在run方法内部,执行postDelayed或者post方法
11             handler.postDelayed(updaterThread, 3000);
12         }    
13     };
14 //调用Handler的post方法,将要执行的线程对象添加到队列当中
15 handler.post(updaterThread);
16 //结束线程
17 handler.removeCallbacks(updaterThread);
18 //把线程装载到队列中,handler没有重新启动新的线程,而是直接在原有线程上调用run函数,没有使用start方法
19 //实现线程,开启线程
20 Thread t = new Thread(r);
21 t.start();
22  Runnable r = new Runnable(){
23 
24         @Override
25         public void run() {
26             System.out.println("handler--->" + Thread.currentThread().getId());
27             System.out.println("handlername--->" + Thread.currentThread().getName());
28             try{
29                 Thread.sleep(10000);
30             }catch(InterruptedException e){
31                 e.printStackTrace();
32             }
33         }
34     };

 

在OnCreate方法中

 1 //1,生成一个HandlerThread对象,实现了使用Looper来处理消息队列的功能,这个类由Android应用程序框架提供
 2 HandlerThread handlerThread = new HandlerThread("handler_thread");
 3 //2,在使用HandlerThread的getLooper方法之前,必须先调用该类的start方法
 4 handlerThread.start();
 5 //声明一个MyHandler函数,接收Looper参数,来处理消息。把线程绑定在Looper对象上
 6 MyHandler myHandler = new MyHandler(handlerThread.getLooper());
 7 //获取消息对象
 8 Message msg = myHandler.obtainMessage();
 9 //将msg发送到目标对象,所谓的对象就是生成的msg对象的Handler对象
10 msg.sendToTarget();
11 
12 //如何在message之间使用Bundle传递数据,存入数据
13 Bundle b = new Bundle();
14 b.putInt("age", 20);
15 b.putString("name", "Jhon");
16 msg.setData(b);        

//MyHandler函数,继承Handler

 1 class MyHandler extends Handler{
 2         
 3     public MyHandler(Looper looper){
 4         super(looper);
 5     }
 6     @Override
 7     public void handleMessage(Message msg) {
 8         //String s = (String)msg.obj;
 9         //取出Bundle对象,获得其中存的值
10         Bundle b = msg.getData();
11         int age = b.getInt("age");
12         String name = b.getString("name");
13         System.out.println("age is " + age + ","+"name is " + name);
14 
15         System.out.println("Handler---->" + Thread.currentThread().getId());
16         System.out.println("handlerMessage");
17     }
18 }

//Handler小结:(这个总结是盗用别人的,谢谢原作者!!)
<1>,Handler的处理过程运行在创建Handler的线程里
<2>,一个looper对应一个MessageQueue
<3>,一个线程对应一个looper
<4>,一个looper对应多个Handler
<5>,不确定当前线程时,更新UI时尽量调用post();方法

原文地址:https://www.cnblogs.com/zjqlogs/p/2779247.html