zoukankan      html  css  js  c++  java
  • 解决Handler与Activity同步冲突

    这个问题可以由Handler的一个子类HandlerThread来解决。

    程序参考自Mars老师的Android课程第一季第十五集。

    代码以及注释有所改动,如下:

     
    1. package com.handler.androidhandler02;   
    2.   
    3. import android.app.Activity;   
    4. import android.os.Bundle;   
    5. import android.os.Handler;   
    6. import android.os.HandlerThread;   
    7. import android.os.Looper;   
    8. import android.os.Message;   
    9.   
    10. public class FirstActivity extends Activity    
    11. {   
    12.   
    13.     @Override  
    14.     protected void onCreate(Bundle savedInstanceState)    
    15.     {   
    16.         super.onCreate(savedInstanceState);   
    17.         setContentView(R.layout.activity_first);   
    18.         //取得HandlerThread对象   
    19.         HandlerThread handlerThread = new HandlerThread("handlerThead");   
    20.         handlerThread.start();   
    21.         //通过HandlerThread对象的getLooper方法取得异步线程(这里自定义为SonHandler)类的对象   
    22.         SonHandler sonHandler= new SonHandler(handlerThread.getLooper());   
    23.         //通过已经取得的异步线程类来取得Message对象   
    24.         Message notice=sonHandler.obtainMessage();   
    25.         //设置要传递的消息,通过Bundle对象来实现   
    26.         Bundle b = new Bundle();   
    27.         b.putString("name","Tom");   
    28.         notice.setData(b);   
    29.     }   
    30. //  自定义SonHandler需要继承Handler,并且需要重新书写构造方法,第二个构造方法的参数Looper是必须的,这个Looper与上面创建这个类的getLooper()相关   
    31.     class SonHandler extends Handler   
    32.     {   
    33.         public SonHandler(){}   
    34.         public SonHandler(Looper looper)    
    35.         {   
    36.             super(looper);   
    37.         }   
    38.            
    39. //      下面是错误的写法……   
    40. //      public void SonHandler(Looper looper)   
    41. //      {   
    42. //          super(looper);   
    43. //      }   
    44.            
    45.         //覆写方法对要处理的Message信息进行处理   
    46.         @Override  
    47.         public void handleMessage(Message notice)   
    48.         {   
    49.             Bundle  b= notice.getData();   
    50.             //得到字符串的键值   
    51.             String name = b.getString("name");   
    52.             System.out.println(name);   
    53.         }   
    54.     }   
    55. }  


    作者:KillerLegend
    出处:http://www.cnblogs.com/KillerLegend/
    分享最新的资源,分享个人所得,欢迎关注我的新浪微博
    新浪微博主页:ikey4u
    我的个人博客:www.ikey4u.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

     
  • 相关阅读:
    第二十九课 循环链表的实现
    第二十八课 再论智能指针(下)
    第二十七课 再论智能指针(上)
    第二十六课 典型问题分析(Bugfix)
    普通new和placement new的重载
    leetcode 581. Shortest Unsorted Continuous Subarray
    leetcode 605. Can Place Flowers
    leetcode 219. Contains Duplicate II
    leetcode 283. Move Zeroes
    leetcode 217. Contains Duplicate
  • 原文地址:https://www.cnblogs.com/killerlegend/p/3255930.html
Copyright © 2011-2022 走看看