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

时间: 2024-10-09 03:22:35

Handler的总结的相关文章

Handler使用

1.为什么要使用Handler机制呢? 一般更新UI,我们都使用线程防止主线程的卡顿,但是我们都知道,java是线程不安全的,很容易造成不同的线程操作同一个view产生混乱.我们无法做到给每个线程,每个view对象都加一个锁,所以谷歌提供了一个给我们handler,通过looper这样的不断压栈出栈的规则,来进行线程的更新. 讲是这么讲,不在线程(非主线程)中使用Handler与主线程产生联系,压根更新不了UI(不用的话会报错的). 2.Handler的用途是什么呢? (1)更新UI (2)消息

安卓 Handler

1. 看视频有关Handler操作,没有用过,里面的老师也没有讲(新手太难了) 查了一下资料. 一.Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释:当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件, 进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作. 如果此时需要一个耗时的操作,例如: 联网读取数据, 或者读取本地较大的一个文件的时

Android中关于Handler的总结

一.Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI.          解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是点击一个 Button, Android会分发事件到Button上,来响应你的操作.  如果此时需要一个耗时的操作,例如: 联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象,

Handler, AsyncTask用法简单示例

package com.jim.testapp; import android.app.Activity; import android.os.AsyncTask; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import androi

andorid 多线程handler用法

.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent&qu

class ha_innobase: public handler

/** The class defining a handle to an Innodb table */ class ha_innobase: public handler { row_prebuilt_t* prebuilt; /*!< prebuilt struct in InnoDB, used to save CPU time with prebuilt data structures*/ THD* user_thd; /*!< the thread handle of the us

Handler和Message详解

Android开发中Handler的经典总结 当应用程序启动时,Android首先会开启一个主线程(也就是UI线程),主线程为管理界面中的UI控件,进行事件分发. 一.Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释:当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件, 进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作.  如果此时需要

Android Handler

1 package com.example.myapp7; 2 3 import android.support.v7.app.ActionBarActivity; 4 import android.os.Bundle; 5 import android.os.Handler; 6 import android.os.Looper; 7 import android.os.Message; 8 import android.util.Log; 9 import android.view.Menu

Android开发:Handler Runnable和Thread之间的区别和联系 应用--------------------看完本篇,从此一览无余!

http://blog.csdn.net/yanzi1225627/article/details/8582081 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限. 下面看例子: package org.thread.demo; class MyThread extends

Android中的Handler, Looper, MessageQueue和Thread

Android中的Handler, Looper, MessageQueue和Thread 前几天,和同事探讨了一下Android中的消息机制,探究了消息的发送和接收过程以及与线程之间的关系.虽然我们经常使用这些基础的东西,但对于其内部原理的了解,能使我们更加容易.合理地架构系统,并避免一些低级错误. 对于这部分的内容,将分成4小节来描述: 1.职责与关系 2.消息循环 3.线程与更新 4.几点小结 ------------------------------------------------