`
DarkWingBoy
  • 浏览: 50297 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

android handler 多线程

 
阅读更多
andriod提供了 Handler 和 Looper 来满足线程间的通信。为了研究其中线程机制的问题,写了2个demo:
Demo1:
package com.mp;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;

public class MyThread extends Activity {
    private Handler handler = new Handler();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        handler.post(new MyRunnable());   
        System.out.println("Oncreate---The Thread id is :"
                + Thread.currentThread().getId());
        setContentView(R.layout.main);
    }

    private class MyRunnable implements Runnable {
        public void run() {
            System.out.println("Runnable---The Thread is running");
            System.out.println("Runnable---The Thread id is :"
                    + Thread.currentThread().getId());
            try {
                Thread.sleep(6000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }
}


在这个demo中,整个过程如下:
程序已启动,就把MyRunnable加入到消息队列中,android的handler是异步机制,所以在handler.post(new MyRunnable());  之后,程序会继续执行,所以以后的语句会继续,这时候我们输出Oncreate中的当前线程ID。同时MyRunnable的run方法也在运行,一样输出run方法中的当前线程ID,然后让线程休眠6秒。
demo的结果分析:
1:控制台的输出: Oncreate---The Thread id is :1
                              Runnable---The Thread is running
                              Runnable---The Thread id is :1
2:程序启动后6秒,我们才看到main.xml中的内容(只有一个textview)

这2个结果都表明handler和主线程是同一个线程。如果这时候你做的是一个耗时的操作(比如下载),那么这样是不可行的。
于是,android给我们提供了Looper这样一个类。其实Android中每一个Thread都跟着一个Looper,Looper可以帮助Thread维护一个消息队列.

Demo2:
package com.mp;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;

public class MyThread2 extends Activity {
    private Handler handler = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        HandlerThread handlerThread = new HandlerThread("myHandlerThread");
        handlerThread.start();

        handler = new Handler(handlerThread.getLooper());

        handler.post(new MyRunnable());

        System.out.println("Oncreate---The Thread id is :"
                + Thread.currentThread().getId());

        setContentView(R.layout.main);

    }

    private class MyRunnable implements Runnable {

        public void run() {
            System.out.println("Runnable---The Thread is running");
            System.out.println("Runnable---The Thread id is :"
                    + Thread.currentThread().getId());
            try {
                Thread.sleep(6000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }
}



在这个demo中,用到了HandlerThread,在HandlerThread对象中可以通过getLooper方法获取一个Looper对象控制句柄,我们可以将其这个Looper对象映射到一个Handler中去来实现一个线程同步机制。于是就有以下结果;
1:控制台的输出: Oncreate---The Thread id is :1
                              Runnable---The Thread is running
                              Runnable---The Thread id is :10
2:程序启动后,我们立刻看到main.xml中的内容。
这样就达到了多线程的结果。
引自http://www.eoeandroid.com/forum.php?mod=viewthread&tid=30464
分享到:
评论

相关推荐

    Android中多线程的Handler原理

    Android中多线程的Handler的工作原理,其中涉及到MessageQueue和Looper。详情可以参见博客:http://www.cnblogs.com/plokmju/p/android_Looper.html

    Android利用handler在线程之间传递代码

    总结来说,Handler机制是Android多线程编程的关键工具之一,它使得开发者能够方便地在线程间传递信息,实现异步处理,确保UI线程不被阻塞,提升用户体验。熟练掌握Handler的使用,对任何Android开发者都至关重要。

    android多线程handler/message机制详解

    Android 多线程Handler/Message机制详解 Android 多线程机制是 Android 应用程序中最重要的组件之一,它允许应用程序在后台执行一些操作,而不影响用户的交互体验。在 Android 中,多线程机制是基于 Handler 和 ...

    利用Handler在线程之间传递数据

    这个demo介绍了通过Handler在线程之间传递消息,demo中一个三个线程,主线程,发送消息的分线程,接收消息的分线程。发送消息的分线程会通知主线程更改标签文字,同时会通知接收消息的分线程更改进度条的进度。

    Android多线程文件上传

    在Android应用开发中,文件上传是一项常见的任务,尤其是在处理大文件或者需要提高用户交互体验时,多线程技术显得尤为重要。本主题聚焦于"Android多线程文件上传",我们将探讨如何利用多线程技术来优化文件上传过程...

    android——多线程

    标题"android——多线程"和描述"android——Handler与多线程应用范例"暗示我们将深入探讨如何在Android中使用Handler来管理多线程。 Android系统默认运行在一个单线程环境中,即主线程,也被称为UI线程。主线程主要...

    android 多线程 looper handler

    Android 多线程 Looper Handler Android 操作系统中,多线程是一种常见的编程技术,通过使用多线程,可以提高应用程序的响应速度和效率。在 Android 中,多线程可以分为两种:有消息循环的线程和没有消息循环的线程...

    Android Handler 线程 示例代码

    在Android开发中,`Handler`、`Thread`、`Toast`、`消息队列`以及`线程`是实现UI交互和异步处理的关键概念。本文将深入探讨这些概念,并结合给定的"Android Handler 线程 示例代码"进行详细讲解。 首先,我们来看`...

    Android Handler Message 多线程实例 - Intel- Developer Zone

    Android Handler Message 多线程实例 - Intel- Developer Zon

    android多线程机制

    本文将详细介绍Android多线程的基本原理及其核心组成部分——`Handler`、`MessageQueue`、`Looper`以及`Message`。 #### 二、Android多线程基础 在Android应用中,默认只有一个主线程,即UI线程。主线程负责处理...

    Android Handler线程间的调度

    在Android系统中,多线程的使用是必不可少的,特别是在UI更新和后台任务处理上。...通过深入研究博客“Android Handler线程间的调度”,开发者能够更好地驾驭Android的多线程环境,提升应用的用户体验。

    Handler多线程处理简单实例

    在Android开发中,多线程处理是至关重要的,特别是在UI更新和后台任务执行时。`Handler`机制就是Android系统提供的一种高效、灵活的线程间通信方式。本实例将深入探讨`Handler`如何与多线程协同工作,帮助开发者更好...

    Android实现多线程下载

    在Android平台上,多线程下载是一项重要的技术,它允许应用程序同时从服务器获取数据,从而显著提高了文件下载的速度和效率。本教程将深入讲解如何在Android环境中实现多线程下载功能,以及涉及的相关知识点。 首先...

    【Android开发入门】Android线程之Handler

    本知识点将深入探讨Android中的Handler机制,它是Android异步处理和消息传递的核心工具,帮助开发者解决多线程环境下UI更新的问题。 一、Android线程基础 Android系统主要分为两个线程:主线程(UI线程)和工作线程...

    androidHandler测试的demo

    通过分析这个`demo`,开发者可以更好地理解Android中的多线程通信机制,并学会在自己的项目中正确、有效地使用`Handler`、`Looper`进行线程间通信。这将有助于提高程序的响应性和用户体验,避免因UI操作不在主线程...

    Android 多线程:使用Thread和Handler

    本篇文章将详细探讨如何在Android中使用Thread和Handler实现多线程通信,确保非UI线程能够安全地更新UI。 首先,Android应用程序的主线程(UI线程)主要负责管理用户界面,处理用户交互事件。主线程不允许执行长...

    android handler的一些测试

    标题“android handler的一些测试”暗示我们将探讨`Handler`如何在多线程环境下工作,以及它如何决定处理特定的消息。 `Handler`类的主要作用是接收并处理`Message`对象,这些消息通常在不同的线程中创建。在...

    Android Handler传值的demo

    在Android开发中,`Handler`、`Message`和`Looper`是实现线程间通信的重要机制,...通过熟练掌握`Handler`、`Message`和`Looper`的工作原理,开发者可以更好地控制应用程序的多线程行为,提升程序的响应性和用户体验。

Global site tag (gtag.js) - Google Analytics