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()方法,这儿不再多说

  • 相关阅读:
    围炉夜话(3)
    围炉夜话(2)
    一步步学习SPD2010--第十一章节--处理母版页(9)--导出母版页
    一步步学习SPD2010--第十一章节--处理母版页(8)--从母版页创建网页
    一步步学习SPD2010--第十一章节--处理母版页(7)--管理Content Placeholders
    一步步学习SPD2010--第十一章节--处理母版页(6)--改变默认母版页
    一步步学习SPD2010--第十一章节--处理母版页(5)--自定义母版页
    一步步学习SPD2010--第十一章节--处理母版页(4)--复制和保存母版页
    一步步学习SPD2010--第十一章节--处理母版页(3)--母版页上使用的控件
    如何使用外部数据列创建SP列表
  • 原文地址:https://www.cnblogs.com/jenson138/p/4017630.html
Copyright © 2011-2022 走看看