zoukankan      html  css  js  c++  java
  • 好记性不如烂笔杆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();方法

  • 相关阅读:
    cancel-ng-swipe-right-on-child
    css.day.05.eg
    css.day05
    css.day04.eg
    css.day04
    css.day03.eg
    css.day03
    css.day02.eg
    九月十月百度人搜,阿里巴巴,腾讯华为笔试面试八十题(第331-410题)(转)
    阿里巴巴笔试题选解
  • 原文地址:https://www.cnblogs.com/zjqlogs/p/2779247.html
Copyright © 2011-2022 走看看