zoukankan      html  css  js  c++  java
  • 六、Android学习第五天——Handler的使用(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html)

    六、Android学习第五天——Handler的使用

    注意:有很多功能是不能写在Activity中的,例如说下载或者处理大量的数据等,如果这类操作写在Activity中,就有可能导致整个Activity无响应甚至报错,这样用户体验就会比较差。所以此类功能应该独立于Activity,且互不干扰,所以Handler就应运而生了。Handler提供了一个异步的消息处理的方案,将具体复杂的操作都放在一个线程中取处理。

    创建一个Handler对象的基本步骤如下:

    (一)点击一个按钮,调用Handler的post方法,将要执行的线程对象添加到队列当中去。

    (二)将要执行的操作写在线程对象的run()方法当中。

    (三)如果想要循环执行,则可以在run方法内部执行Handler的postDelayed或者post方法,将线程反复加入到队列当中。

    下面是使用Handler的一个简单的例子:

    package mickey.handler;

    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;


    public class HandlerTest extends Activity {

    // 声明两个按钮控件
    private Button begin = null;
    private Button end = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // 根据控件的ID得到代表控件的对象,并为这两个按钮设置相应的监听器
    begin = (Button) findViewById(R.id.begin);
    begin.setOnClickListener(new StartButtonListener());
    end = (Button) findViewById(R.id.end);
    end.setOnClickListener(new EndButtonListener());

    }

    // 为start按钮设置的监听器
    class StartButtonListener implements OnClickListener {

    @Override
    public void onClick(View v) {
    // 无延迟,直接加入消息队列中,此时消息队列中只有此一个线程
    // 调用handler的post方法,将要执行的线程对象添加到队列当中去
    handler.post(updateThread);
    }

    }

    // 为end按钮设置的监听器
    class EndButtonListener implements OnClickListener {
    @Override
    public void onClick(View v) {
    handler.removeCallbacks(updateThread);
    }
    }

    // 创建一个Handler对象
    Handler handler = new Handler();
    // 一个线程类,将要执行的操作写在线程对象的run方法当中
    Runnable updateThread = new Runnable() {
    @Override
    public void run() {
    System.out.println("run......");

    // 在run方法内发执行postDelayed或者post方法,延迟三秒,将线程加入队列
    handler.postDelayed(updateThread, 3000);
    }
    };

    }

    但是我们看到了,上面的例子中我们只是调用了线程的run()方法,并没用调用Thread的start()方法来重启一个线程,因此,上面这个例子中,实际上我们并没有重启一个新的线程,从始至终Handler都是和Activity在同一线程中的。

    所以如果我们在使用Handler时,要重启一个线程,使用Handler.post(Thread thread)只是调用了该线程的run方法,我们只有使用java中重启线程的方法来重启一个新的线程,即调用Thread.start()方法,这儿不再多说

  • 相关阅读:
    企业架构-发布【企业架构框架-TOGAF v0.1.pdf】
    dropbox连接不上解决方法
    信息系统开发平台OpenExpressApp - 框架待完善工作事项
    微软全球Web Camps大会5月着落中国,免费报名参加2天原汁原味的活动,赶快报名
    BABOK - 企业分析(Enterprise Analysis)概要
    DNN(DotNetNuke)研究手札系列3-框架(概述)
    DNN(DotNetNuke)研究手札系列5之DNN的未来(蓝图)
    我乐意为博客园贡献一份力量:请签名
    DNN(DotNetNuke)研究手札系列4-框架(硬伤) 1
    感慨 20 之开源的前途/钱图?(1数据库)
  • 原文地址:https://www.cnblogs.com/jenson138/p/4017630.html
Copyright © 2011-2022 走看看