新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> Android开发环境的安装配置 Android开发基础
    [返回] 中文XML论坛 - 专业的XML技术讨论区Android开发论坛『 Android 开发入门 』 → Android入门学习:Handler简介与实例[分享] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 4933 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: Android入门学习:Handler简介与实例[分享] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     挥戈回日 帅哥哟,离线,有人找我吗?魔羯座1987-12-26
      
      
      等级:大一(猛啃高等数学)
      文章:37
      积分:138
      门派:GOOGLEBBS.NET
      注册:2013/7/14

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给挥戈回日发送一个短消息 把挥戈回日加入好友 查看挥戈回日的个人资料 搜索挥戈回日在『 Android 开发入门 』 的所有贴子 访问挥戈回日的主页 引用回复这个贴子 回复这个贴子 查看挥戈回日的博客楼主
    发贴心情 Android入门学习:Handler简介与实例[分享]

    1、Handler简介
    Handler 为Android操作系统中的线程通信工具,包为android.os.Handler。
    与Handler绑定的有两个队列,一个为消息队列,另一个为线程队列。Handler可以通过这两个队列来分别:
    发送、接受、处理消息–消息队列;
    启动、结束、休眠线程–线程队列;
    Android OS中,一个进程被创建之后,主线程(可理解为当前Activity)创建一个消息队列,这个消息队列维护所有顶层应用对象(Activities, Broadcast receivers等)以及主线程创建的窗口。你可以在主线程中创建新的线程,这些新的线程都通过Handler与主线程进行通信。通信通过新线程调用Handler的post()方法和sendMessage()方法实现,分别对应功能:
    post() 将一个线程加入线程队列;
    sendMessage() 发送一个消息对象到消息队列;
    当然,post()方法还有一些变体,比如postDelayed()、postAtTime()分别用来延迟发送、定时发送;
    消息的处理,在主线程的Handler对象中进行;具体处理过程,需要在new Handler对象时使用匿名内部类重写Handler的handleMessage(Message msg)方法;
    从消息队列中获取消息。
    线程加入线程队列可以在主线程中也可以在子线程中进行,但都要通过主线程的Handler对象调用post()。
    2、Handler实例
    与ProgressBar结合的例子:
    package mars.barhandler;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ProgressBar;
    public class TestBarHandler extends Activity {
    /** Called when the activity is first created. */
    //声明控件变量
    ProgressBar bar = null;
    Button startButton = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //根据控件的ID得到代表控件的对象,并为按钮设置监听器
    bar = (ProgressBar)findViewById(R.id.bar);
    startButton = (Button)findViewById(R.id.startButton);
    startButton.setOnClickListener(new ButtonListener());
    }
    //当点击startButton按钮时,就会执行ButtonListener的onClick方法
    class ButtonListener implements OnClickListener{
    public void onClick(View v) {
    // TODO Auto-generated method stub
    bar.setVisibility(View.VISIBLE);
    updateBarHandler.post(updateThread);
    }
    }
    //使用匿名内部类来复写Handler当中的handleMessage方法
    Handler updateBarHandler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
    bar.setProgress(msg.arg1);
    Bundle bundle = msg.getData();
    updateBarHandler.post(updateThread);
    System.out.println("test---->" + bundle.getString("test"));
    }
    };
    //线程类,该类使用匿名内部类的方式进行声明
    Runnable updateThread = new Runnable(){
    int i = 0 ;
    public void run() {
    System.out.println("Begin Thread" + i);
    i = i + 10 ;
    //得到一个消息对象,Message类是有Android操作系统提供
    Message msg = updateBarHandler.obtainMessage();
    //将msg对象的arg1参数的值设置为i,用arg1和arg2这两个成员变量传递消息,优点是系统性能消耗较少
    msg.arg1 = i ;
    Bundle bundle = new Bundle();
    bundle.putString("test", "test bundle");
    msg.setData(bundle);
    try {
    //设置当前显示睡眠1秒
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    //将msg对象加入到消息队列当中
    if( i > 100){
    //如果当i的值为100时,就将线程对象从handler当中移除
    updateBarHandler.removeCallbacks(updateThread);
    System.out.println(">>>>>>");
    }else{
    updateBarHandler.sendMessage(msg);
    System.out.println("<<<<<<");
    }
    }
    };
    class MyThread extends Thread{
    public void run(){
    }
    }
    }

       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    欢迎加入清源的android学习交流群,群号是: 278744577,加群时请验证:w3,谢谢!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2013/8/7 16:37:00
     
     GoogleAdSense魔羯座1987-12-26
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Android 开发入门 』 的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/22 13:32:26

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    54.688ms