`
wanghailiang333
  • 浏览: 197765 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

弄错一个概念:Android的Thread与Handler是不同的!

 
阅读更多

弄错一个概念:Android的Thread与Handler是不同的!

 

一直以为Android中Handler的post方法会创建一个线程,一直都是这样编程过来,也没发现什么问题,

 

最近在编一个对线程要求很高的一个程序时,发现机器反应特别缓慢,一直找不到问题所在,

 

最后实在没办法用Thread代替Handler来创建线程,问题解决了...

 

原来一直是我的概念出现了问题,Handler并不是Android为新建线程而设立的方法,Handler其实是用来对控件进行异步刷新的方法。

 

这里要注意:Handler不能在Thread中创建,必须要在Thread外创建。

 

对我的无知进行一个记录。

分享到:
评论
4 楼 286701853 2014-10-30  
qingfei 写道
Handler不能在Thread中创建...你Handler handler = new Handler();   不就是主线程中创建的么。。。
必须要在Thread外创建。....那如果需求是反过来的话 。。。你主线程 怎么通知 子线程。。。。。。

在子线程中创建消息队列接受泵
例子:
class LooperThread extends Thread {
      public Handler mHandler;
      public void run() {
          Looper.prepare();
          mHandler = new Handler() {
              public void handleMessage(Message msg) {
                  // process incoming messages here
              }
          };
          Looper.loop();
      }
  }
这样你的线程就具有了消息处理机制了,在Handler中进行消息处理。
3 楼 qingfei 2013-08-23  
Handler不能在Thread中创建...你Handler handler = new Handler();   不就是主线程中创建的么。。。
必须要在Thread外创建。....那如果需求是反过来的话 。。。你主线程 怎么通知 子线程。。。。。。
2 楼 wanghailiang333 2012-04-27  
chenshaoyang0011 写道
联系楼主看看handler的源码

放一段处理例子吧:

原来:
Handler handler = new Handler();
handler.post(){
    //网络操作
    //控件刷新操作
}

以上代码运行瓶颈在网络操作上,以为时延很大

修改后
new Thread(new Runnable(){
    public void run(){
        //网络操作
        handler.post(new Runnable(
            //控件刷新操作
        ));
    }
}).start();

这样做才是真正的启动了线程,让网络操作在后台运行
Handler的操作是控制控件的刷新,保证控件刷新的线程安全。

纯属个人意见,欢迎拍砖。

1 楼 chenshaoyang0011 2012-04-27  
联系楼主看看handler的源码

相关推荐

    Android 多线程:使用Thread和Handler

    在Android中,我们可以创建一个Thread实例,然后重写它的run()方法,将耗时操作放入其中。例如,以下代码展示了如何使用Thread下载图片: ```java Thread thread = new Thread(new Runnable() { @Override public...

    Android Thread Handler

    3. **Handler**:每个Handler都与一个Looper关联,它负责将Message放入消息队列,并通过`handleMessage(Message msg)`方法处理这些Message。这样,后台线程可以通过Handler向主线程发送消息,主线程则可以在不阻塞UI...

    Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面

    ### Android异步处理详解:使用Thread+Handler实现非UI线程更新UI界面 #### 概述 Android系统中,每一个应用程序都运行在一个独立的Dalvik虚拟机进程中。当应用程序启动时,系统会创建一个主线程(MainThread),也...

    android service thread toast handler

    在Android开发中,`Service`、`Thread`、`Toast`和`Handler`是四个非常重要的组件和概念,它们在创建高效、响应式的应用程序中起着关键作用。下面将详细阐述这些知识点及其相互关系。 首先,`Service`是Android中的...

    Android:Handler的post()方法和Thread的start()方法执行Thread的run()方法的区别

    * 创建一个Handler对象,使用Handler对象h把Runnable的对象r压入队列 * 此时只会会执行Run()方法,但是不会开启新的线程 */ //Handler h = new Handler(); //h.post(r); /* * 在java中真正开启...

    ndroid异步处理一:使用Thread+Handler实现非UI线程更新UI界面

    为了解决这个问题,Android提供了多种异步处理机制,其中一种常见的方式是使用`Thread`配合`Handler`来实现非UI线程执行耗时任务并更新UI。本篇将详细介绍这一方法。 首先,我们需要理解Android的线程模型。Android...

    Android线程模式(handler,thread,looper)

    1. **Handler**:Handler是Android消息处理机制的核心组件之一,它用于在不同的线程之间传递消息。一个Handler通常与Looper关联,发送的消息会被添加到Looper的消息队列中。主线程默认有一个Looper,而子线程如果...

    Android_Handler详解(一)

    在Android开发中,Handler是一个至关重要的组件,它与线程、消息队列和Looper紧密关联,用于实现不同线程间的通信。本篇将深入探讨Handler的基本概念、使用方法以及其在多线程环境中的作用。 1. Handler是什么? ...

    Android源代码:HandlerDemo

    在Android开发中,`Handler`是一个至关重要的组件,它用于在主线程中处理来自其他线程的消息,确保UI更新操作的正确执行。本项目“Android源代码:HandlerDemo”将深入探讨`Handler`机制及其在多线程环境中的应用。 ...

    关于Thread和Handler的使用(一)

    在Android开发中,Thread和Handler是两个非常关键的概念,它们用于处理线程间通信和UI更新,确保程序的运行效率和用户体验。这篇博客主要探讨了如何有效地使用Thread和Handler进行多线程操作。 首先,Thread在Java...

    AsyncTask 与Thread加Handler处理消息比较

    在Android开发中,异步操作是必不可少的一部分,用于在后台执行耗时任务,避免阻塞主线程导致应用无响应(ANR)。本篇文章将详细探讨两种常见的异步处理方式:`AsyncTask`和`Thread`配合`Handler`,并进行对比分析。...

    androidHandler测试的demo

    在Android开发中,`Handler`、`Looper`和`Message`是实现线程间通信的重要组件,它们共同构建了一个消息处理机制。这个机制允许开发者在不同的线程之间传递消息,通常用于更新UI或者执行异步任务。下面我们将深入...

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

    在Android应用开发中,线程管理是至关重要的一个环节,特别是在UI交互和后台处理的结合上。本知识点将深入探讨Android中的Handler机制,它是Android异步处理和消息传递的核心工具,帮助开发者解决多线程环境下UI更新...

    Android Studio通过Handler制作简单的计时器

    Handler是Android中的一个关键组件,它允许开发者在不同的线程之间发送和处理消息,从而实现异步操作。 首先,我们需要了解Android Studio的基础环境设置。Android Studio是Google提供的官方集成开发环境(IDE),...

    Android Handler消息处理顺序分析

    Handler是Android中的一个类,用于发送和处理消息。它通常与Looper和Message配合工作,允许开发者在不同的线程之间传递信息。在主线程(UI线程)中,有一个默认的Looper对象,它持续不断地从消息队列中取出Message并...

    android 更新 UI 线程 handler

    在Android开发中,更新UI(用户界面)是一个常见的任务,但是由于Android的主线程(也称为UI线程)是负责处理用户交互和绘制界面的,所以直接在后台线程进行UI更新可能会导致程序崩溃或者界面卡顿。为了解决这个问题...

    android 中Handler 的几种写法

    在Android开发中,`Handler`是一个至关重要的组件,它用于在主线程中处理来自其他线程的消息,确保UI更新和事件处理的同步性。本文将详细介绍`Handler`的几种常见写法,以及如何使用`Handler.Callback`进行消息处理...

    模拟Android Handler机制Demo

    【Android Handler机制】是Android应用程序中用于线程间通信的核心组件,它与Looper和Message紧密配合,实现消息的发送、处理以及线程间的同步。在Android应用开发中,尤其是涉及到UI更新时,Handler机制显得尤为...

    android多线程handler/message机制详解

    Looper 相当于一个 MessageQueue 的管理人员,它会不停的循环的遍历队列,然后将符合条件的 Message 一个个的拿出来交给 Handler 进行处理。 为什么需要多线程?在日常应用中,我们通常需要处理一些“后台,用户不...

    android-Handler的使用

    为了解决这个问题,Android 引入了 Handler 和 Looper 的概念。Handler 可以在子线程中创建,但它的实例通常与主线程关联,因为它需要在主线程中执行任务,以便安全地更新 UI。子线程通过调用 `sendMessage()` 或 `...

Global site tag (gtag.js) - Google Analytics