Android线程之Looper

  之前已经为大家奉献了关于Handler和Message的使用,本篇我们来了解一下Handler内部的具体使用,本篇主要探讨Looper的在处理Handler的消息机制中起的重要作用,我们知道我们在子线程向主线程发生消息通过sendMessage()方法,Handler处理消息则是通过handMessage()方法,内部的消息传递机制,下面我们一起来探讨一下。

  为了方便大家的理解,这里我以一个日常生活中的例子来为大家介绍一下Handler、Looper的处理细节:例子讲述的是我们开会时,要去上厕所。

  

  看到上面的例子,我想大家对于Looper一定有了一个很好的认识。

  自建Thread类中实现Handler对象:

public class MainActivity extends Activity {

    private Handler firstHandler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            System.out.println("UI------->:"+Thread.currentThread());
        };
    };

    class Mythread extends Thread{
        private Handler handler;
        @Override
        public void run() {

            Looper.prepare();//创建一个Looper对象
            handler = new Handler(){
                @Override
                public void handleMessage(Message msg) {
                    System.out.println("子线程:"+Thread.currentThread());
                }
            };
            Looper.loop();//通过这个方法循环处理方法

        }
    };

    private Mythread thread;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        thread = new Mythread();
        thread.start();
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        thread.handler.sendEmptyMessage(1);//在子线程中处理
        firstHandler.sendEmptyMessage(1);//在主线程中处理

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

  LogCat信息:

  

时间: 2024-10-11 13:07:56

Android线程之Looper的相关文章

android线程之 Handler与AsyncTask的应用

做应用程序的开发的时候,我们程序员更多的关心的是线程. 一个android应用程序开启后,默认开启一个主线程(大部分都和UI相关,所以又叫UI 线程).在UI线程上面运行的Avtivity组件,Service组件,BroadcastReceiver组件. 用户操作主线程时,需要注意不允许在UI线程中做耗时的操作.比如:复杂的逻辑计算,休眠,联网,下载数据等都是耗时的操作.如果在UI主线程中做耗时的操作,一旦超过5秒,应用程序抛出异常,会报一个ANR(Application not respond

Android线程之AsyncTask

在之前的博客中为大家分享过关于Android多线程处理,想必大家对于Android为什么要使用多线程已经有了清晰的认识,我就在简单唠两句,Android规定UI界面的更新必须在在主线程进行,对于访问网络的耗时操作必须在子线程中执行,所以如果你想成为一名真正的Android开发工程师,多线程是你的必修课.本篇带给大家关于Android为我们封装好的一个简单的线程类AsyncTask. AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提

Android 多线程之IntentService 完全详解

关联文章: Android 多线程之HandlerThread 完全详解 Android 多线程之IntentService 完全详解 android多线程-AsyncTask之工作原理深入解析(上) android多线程-AsyncTask之工作原理深入解析(下) IntentService 一.IntentService概述 ??上一篇我们聊到了HandlerThread,本篇我们就来看看HandlerThread在IntentService中的应用,看本篇前建议先看看上篇的HandlerT

多线程之Thread+handler

应用开发中,经常会遇到需要多线程技术的时候,比如UI显示和数据处理分开. 在实际应用中经常会遇到这种场景,我们需要新开一个线程来监听数据状态(数据状态的改变,接收数据,发送数据等等),当发现数据状态改变时通知主线程(通过消息机制发送消息到主线程),主线程接收到通知之后进行处理(自定义消息处理接口). 具体实现如下: 准备线程的创建和消息的处理,这里需要用到android里面的Handler和Thread类,在主线程中添加两个成员Handler.Thread,并实现消息的发送和处理: privat

Android-——多线程之Handler(转)

Android--多线程之Handler 原文地址:http://www.cnblogs.com/shirley-1019/p/3557800.html 前言 Android的消息传递机制是另外一种形式的“事件处理”,这种机制主要是为了解决Android应用中多线程的问题,在Android中不 允许Activity新启动的线程访问该Activity里的UI组件,这样会导致新启动的线程无法改变UI组件的属性值.但实际开发中,很多地方需要在 工作线程中改变UI组件的属性值,比如下载网络图片.动画等等

深入理解Android消息处理系统——Looper、Handler、Thread

Android应用程序也是消息驱动的,按道理来说也应该提供消息循环机制.实际上谷歌参考了Windows的消息循环机制,也在Android系统中实现了消息循环机制. Android通过Looper.Handler来实现消息循环机制,Android消息循环是针对线程的(每个线程都可以有自己的消息队列和消息循环). 本文深入介绍一下Android消息处理系统原理. Android系统中Looper负责管理线程的消息队列和消息循环,具体实现请参考Looper的源码. 可以通过Loop.myLooper(

OC多线程之GCD ----- 2

dispatch_create生成的Queue不管是并行队列还是串行队列,其优先级都是默认优先级 但是可以用dispatch_set_target_queue来改变队列的优先级 dispatch_set_target_queue(原来的队列, 目标优先级队列) 使用这个函数需要获取两个队列,一个是需要变更优先级的队列,一个是指定优先级的队列(指定优先级的队列可以通过get_global获得) 如果多个串行队列优先级相同,那么这些队列里的任务也会串行执行 dispatch_after函数并不能非常

JAVA多线程之wait/notify

本文主要学习JAVA多线程中的 wait()方法 与 notify()/notifyAll()方法的用法. ①wait() 与 notify/notifyAll 方法必须在同步代码块中使用 ②wait() 与  notify/notifyAll() 的执行过程 ③中断 调用wait()方法进入等待队列的 线程 ④notify 通知的顺序不能错 ⑤多线程中测试某个条件的变化用 if 还是用 while? ①wait() 与 notify/notifyAll 方法必须在同步代码块中使用 wait()

多线程之AutoResetEvent

我们在线程编程的时候往往会涉及到线程的通信,通过信号的接受来进行线程是否阻塞的操作. AutoResetEvent 允许线程通过发信号互相通信.通常,此通信涉及线程需要独占访问的资源. AutoResetEvent 的方法有很多,具体方法和扩展方法请详见AutoResetEvent类,最常用方法中就有Set()和WaitOne(). 线程通过调用 AutoResetEvent 上的 WaitOne 来等待信号.如果 AutoResetEvent 处于非终止状态,则该线程阻塞,并等待当前控制资源的