Handler的总结

我们创建的Service。Activity,Broadcast均是一个主线程处理,即UI线程,

但是进行耗时操作时,比如I/O读写的大文件,数据库操作及网络下载需要很长的时间,为了不阻塞用户界面,出现ANR的响应提示窗口,我们可以考虑使用Thread线程来解决

1.对于线程中的刷新一个view为基类的界面,可以使用postInvalidate()方法在线程中处理,其中还提供了一些重写方法比如postInvalidate(int left,int

top,int right,int bottom)来刷新一个举行区域,及延迟操作,比如postInvalidateDelayed(long delayMiliseconds)或postInvalidateDelayed(long delayMiliseconds,int left,int top,int right,int bottom)方法,其中第一个参数为毫秒。

2.推荐用一个Handler来处理这些,可以在一个线程的run()方法中调用handler对象的一个postMessage或sendMessage方法来实现,Android程序内部维护着一个消息队列,会轮流处理这些,

3.Looper:其实Android中每一个Thread都跟着一个Looper,Looper可以帮助Thread维护一个消息队列,但是Looper和Handler没有什么关系,我们从开源代码可以看到Android还提供了一个Thread继承类HandlerThread可以帮助我们处理,在HandlerThread对象中可以通过getLooper来获取Looper对象控制句柄,我们可以将这个Looper对象映射到一个Handler中去实现一个线程的同步机制,Looper对象执行需要初始化looper.perpare方法,同时还要释放资源,使用Looper.release方法。

4.Massage:对于Android中Handler可以传递一些内容,通过Bundle对象可以封装String,Integer和Blob二进制对象,我们通过在线程中使用Handler对吸纳高的sendEmptyMessage或sendMessage方法来传递一个Bundle对象到handle处理器,对于Handler类提供了重写方法handlerMessage(Message msg)来判断,通过msg。what来区分每条信息。将Bundle解包来实现Handler类更新UI线程中的内容实现控件的刷新操作。相关的Handler对象有关消息发送sendXXX相关方法如下,同时还要postXXXX相关方法,一个为发送后直接返回,一个为处理后才返回。

5.在Android中还提供了一个Task及AsyncTask处理方式

6.线程:

new Thread(

new Runabler(){

      public void run(){

        view.invalidate();

            }

          }

).start();

7.Thread+handler:

Handler myHandler=new Handler(){

    public void handleMessage(Message msg){

      switch(msg.what){

        case TestHadler.GUIUPDATEIDENTUFIER:

            view.invalidate();

            }

      }

        super.handlerMessgae(msg);

};

class myThread implement Runable{

  public void run(){

    while(!Thread.currentThread().isInterrupted() ){

        Message messgae=new Message();

        message.what=TestHandler.GUIUPDATEIDENTUFIER;

        TestHandler.this.myHandler.sentMessage(message);

          try( Thread.sleep(100); ){

          catch(){}          

                      }

                            }

      }

}

8.TimerTask+Handler:

public class TestTimer extends Activity(){

    Timer timer=new Timer();

    Handler handler=new Handler(){

      public void handleMessage(Message msg){

        switch(msg.what){

        case 1:  setTitle("123");

            break;

            }

          super.handleMessage(msg);

                }

    };

    TimerTask task=new TimerTask(){

    public void run(){

        Message msg=new Message();

        msg.what=1;

        handler.senMessage(msg);  

          }

    };

    public void onCreate(Bundle savedInstanceState){

      super.onCreate(savedInsanceState);

      setContenView(R.layout.main);

       timer.schedule(task,10000);

    }

}

9.Runable+Handler.postDelayed(runable,time)  :在Android里定时更新UI,通常使用的时java.util.Timer ,java.util.TimerTask ,android.os.Handler 组合,实际上Handler自身已经提供了定时的功能。

  privae Handler handler=new Handler();

  priavte Runable myRunable=new Runable(){

    public void run(){

      if(run){

        handler.postDelayed(this,1000);

          count++;

           }

          tvCounter.setText("count:"+count):

      }

  };

然后再其他地方调用:

handler.post(myRunable);

handler.post(myRunable,time);

案例看:http://shaobin0604.javaeye.com/blog/515820

Handler的总结的更多相关文章

  1. android Handler介绍

    Handler使用介绍: Handler根据接收的消息,处理UI更新.Thread线程发出消息,通知Handler更新UI. Handler mHandler = new Handler() {  p ...

  2. Handler

    1.1 继承AbstractController优点:能定制请求方式 package cn.happyl.controller; import javax.servlet.http.HttpServl ...

  3. Android消息处理机制(Handler、Looper、MessageQueue与Message)

    Android是消息驱动的,实现消息驱动有几个要素: 消息的表示:Message 消息队列:MessageQueue 消息循环,用于循环取出消息进行处理:Looper 消息处理,消息循环从消息队列中取 ...

  4. Android笔记——Handler Runnable与Thread的区别

    在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run() ...

  5. Android消息传递之Handler消息机制

    前言: 无论是现在所做的项目还是以前的项目中,都会遇见线程之间通信.组件之间通信,目前统一采用EventBus来做处理,在总结学习EventBus之前,觉得还是需要学习总结一下最初的实现方式,也算是不 ...

  6. Handler系列之内存泄漏

    本篇简单的讲一下平常使用Handler时造成内存泄漏的问题. 什么是内存泄漏?大白话讲就是分配出去的内存,回收不回来.严重会导致内存不足OOM.下面来看一下造成内存泄漏的代码: public clas ...

  7. Handler系列之创建子线程Handler

    上一篇我介绍了Handler机制的工作原理,默认情况下,ActivityThread类为我们创建的了主线程的Looper和消息队列,所以当你创建Handler之后发送消息的时候,消息的轮训和handl ...

  8. Handler系列之原理分析

    上一节我们讲解了Handler的基本使用方法,也是平时大家用到的最多的使用方式.那么本节让我们来学习一下Handler的工作原理吧!!! 我们知道Android中我们只能在ui线程(主线程)更新ui信 ...

  9. Handler系列之使用

    作为一个Android开发者,我们肯定熟悉并使用过Handler机制.最常用的使用场景是"在子线程更新ui",实际上我们知道上面的说话是错误的.因为Android中只有主线程才能更 ...

  10. 阶段一:用Handler和Message实现计时效果及其中一些疑问

    “阶段一”是指我第一次系统地学习Android开发.这主要是对我的学习过程作个记录. 本来是打算继续做天气预报的优化的,但因为某些原因,我要先把之前做的小应用优化一下.所以今天就插播一下用Handle ...

随机推荐

  1. 记一次小团队Git实践(中)

    对于初学者,从使用上先入手,往往学的最快,并从中汲取教训,再回头更深入的学习,效果尤佳. 安装git 安装git自不必说,mac已经内置了git,linux下一个命令就能搞定,windows下需要下载 ...

  2. try catch finally的一些用法

    一:例题: package test; import javax.swing.*; class AboutException { public static void main(String[] a) ...

  3. SpringMVC解析5-DispatcherServlet逻辑细节

    MultipartContent类型的request处理 对于请求的处理,spring首先考虑的是对于Multipart的处理,如果是MultipartContent类型的request,则转换req ...

  4. 破解ZIP加密文件密码fcrackzip

    破解ZIP加密文件密码fcrackzip ZIP是最常见的文件压缩方式.由于其压缩算法开源,主流操作系统都支持这种压缩算法.ZIP压缩方式支持密码加密.加密的时候会在文件头部保存密钥相关信息.利用这个 ...

  5. Swift3.0语言教程获取C字符串

    Swift3.0语言教程获取C字符串 Swift3.0语言教程获取C字符串,为了让Swift和C语言可以实现很好的交互,开发者可以使用NSString的cString(using:)方法在指定编码格式 ...

  6. [工作中的设计模式]桥接模式bridge

    一.模式解析: 策略模式一节讲过,通过扩展持有者,使持有者形成抽象类,然后实现多个具体持有者,策略模式可以转化为桥接模式. 桥接模式定义为:将抽象部分与实现部分分离,使它们都可以独立的变化,在软件系统 ...

  7. 点击不同按钮生成不同窗体到某个panel上面,类似Frame用法--不错

    //点击不同按钮生成不同页面加载到某个panel上面.procedure TMainForm.DemoButtonClick(Sender: TObject); var NewDemoClass: T ...

  8. 我认为我可以去尝试做一下Maya Ue4导出插件

    Begin Map Begin Level Begin Actor class="StaticMeshActor" Name=Floor Archetype=StaticMeshA ...

  9. js中for in 和 for each in的用法和区别

    区别一:           for in是javascript 1.0 中发布的.         for each in是作为E4X标准的一部分在javascript 1.6中发布的,而它不是EC ...

  10. 来抢你们IT狗的饭碗了

    Java,Html,Css,JavaScript,Jsp啥都不会啊 ,等着我!