`
lrc_1986
  • 浏览: 95506 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

[Android实例] Android之handler使用

阅读更多
android里面对于异步消息的处理,提供了一套Handler的实现方案。Handler有很多适宜的应用和微妙之处,使它在和Thread以及Service等一起使用的时候达到很好的效果。
一. Handler与Thread的区别。
Handler与调用者处于同一线程,如果Handler里面做耗时的动作,调用者线程会阻塞。Android UI操作不是线程安全的,并且这些操作必须在UI线程中执行。Android提供了几种基本的可以在其他线程中处理UI操作的方案,包括Activity的runOnUiThread(Runnable),View的post以及1.5版本的工具类AsyncTask等方案都采用了Handler,Handler的post对线程的处理也不是真正start一个新的线程,而是直接调用了线程的run方法,这正是google煞费苦心搞一套Handler的用意。

 public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      startThread();
      // sendMessage();
      SystemClock.sleep(2000);
      setContentView(R.layout.main);
   } 
   public void startThread() {
      mThread.start();
   }
    
   public void sendMessage() {
      MHandler mHandler = new MHandler();
      Message msg = mHandler.obtainMessage();
      msg.sendToTarget();
   }
   class MHandler extends Handler {
      public MHandler() {
      } 
      public MHandler(Looper l) {
        super(l);
      } 
      @Override
      public void handleMessage(Message msg) {
        int count = 0;
        while (count++ < Integer.MAX_VALUE) {
           Log.d(TAG, "Rintail");
        }
      }
   } 
   Thread mThread = new Thread() {
      @Override
      public void run() {
        int count = 0;
        while (count++ < Integer.MAX_VALUE) {
           Log.d(TAG, "Rintail");
        }
      }
   }; 




二.Handler对于Message的处理不是并发的。
一个Looper 只有处理完一条Message才会读取下一条,所以消息的处理是阻塞形式的。但是如果用不同的Looper则能达到并发的目的。Service中,onStart的执行也是阻塞的。如果一个startService在onStart执行完成之前,再次条用startService也会阻塞。如果希望能尽快的执行onStart则可以在onStart中使用handler,因为Message的send是非阻塞的。如果要是不同消息的处理也是并发的,则可以用不同的Looper实例化Handler。

public void onStart(Intent intent, int startId) {
      super.onStart(intent, startId);
      sendMessageWithLooper();
      //sendMessage();
   } 
   public void sendMessage() {
      MHandler mHandler = new MHandler();
      Message msg = mHandler.obtainMessage();
      msg.sendToTarget();
   } 
   public void sendMessageWithLooper() {
      HandlerThread ht = new HandlerThread("Rintail");
      ht.start();
      MHandler mHandler = new MHandler(ht.getLooper());
      Message msg = mHandler.obtainMessage();
      msg.sendToTarget();
   }
   class MHandler extends Handler {
      public MHandler() {
      }
      public MHandler(Looper l) {
        super(l);
      }
      @Override
      public void handleMessage(Message msg) {
        Log.d(TAG, "first");
        while (true) {
           if (false)
              break;
        }
        Log.d(TAG, "second");
      }
   }; 
   class MyThread extends Thread {
      @Override
      public void run() {
        Log.d(TAG, "first");
        while (true) {
           if (false)
              break;
        }
        Log.d(TAG, "second");
      }
   }; 



三、资源回收。
向Handler对象发送类似new Message ()形式的空Message可以达到清空Message的目的,这种做法与getLooper().quit()的做法是一样的。如果利用的资源较多,应及时清理。
分享到:
评论

相关推荐

    android 实例 Activity 之间通过 Handler 通信

    本实例将深入探讨如何利用Handler在两个Activity之间传递数据和触发事件。 一、Handler基础 Handler是Android中的一个关键组件,它主要用于处理由Looper对象分发的消息(Message)。当在主线程(UI线程)中创建一个...

    android handler runnable使用实例(关键是内部run中停止)

    通常,我们会在主线程(UI线程)中创建一个Handler实例,这样处理的消息就会在这个线程中执行,这对于更新UI是必要的,因为Android只允许主线程操作UI。 `Runnable`是一个接口,它定义了一个单个方法`run()`. 任何...

    android demo,使用Handler的postDelay,Runnable run实现延时3秒的splash。

    - 在SplashActivity的onCreate方法中,初始化Handler实例。 - 实现Runnable接口,重写run方法。在run方法内,执行你需要在3秒后完成的任务,比如关闭Splash Screen或启动主Activity。 - 使用Handler的`...

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

    Handler是Android中处理消息和调度任务的对象,它通常与Looper和Message配合使用,实现线程间的通信。主线程中默认有一个Looper对象,负责接收和分发Message,而Handler则用来发送Message到Looper,从而实现主线程的...

    androidHandler测试的demo

    在“androidHandler测试的demo”中,我们可以预期包含以下内容: 1. 创建自定义`Handler`子类:这个子类可能重写了`handleMessage(Message msg)`方法,根据`msg.what`的值执行不同的操作,比如更新UI元素或执行特定...

    Android_Handler详解(一)

    总结起来,Handler是Android中进行线程间通信的重要工具,合理使用它可以有效地提升应用的性能和用户体验。在实际开发中,应结合使用Handler、Looper和Thread,以实现高效的多线程编程。在后续章节,我们将更深入地...

    android handler例子

    在Android开发中,`Handler`是一个至关重要的组件,它用于处理与线程通信相关的任务,尤其是在主线程(UI线程)和工作线程之间。`Handler`、`Looper`和`Message`三者共同构成了Android的消息传递机制。下面将详细...

    android Handler详细使用方法实例

    Android中的Handler机制是Android应用开发中的核心组件之一,它与多线程、消息队列紧密相连,用于实现线程间的通信和任务的调度。Handler允许您将任务发送到特定的线程的队列中执行。一个典型的使用场景是在非UI线程...

    android-Handler的使用

    【Android Handler 使用详解】 Handler 是 Android 平台中用于处理线程间通信的关键组件,尤其在涉及 UI(用户界面)更新时,它扮演着至关重要的角色。在 Android 应用程序启动时,系统会默认创建一个主线程,也...

    Android的日期类及Handler的使用

    本文将深入探讨Android中的日期类以及Handler的使用,这两个概念在实际应用中有着广泛的应用。 首先,让我们了解一下Android中的日期类。在Java和Android中,日期类主要用于处理日期和时间相关的操作。最常用的日期...

    Android Handler机制实例

    以上就是Android Handler机制的基础实例和使用方法。理解并熟练运用Handler,可以有效地在不同线程之间协调工作,提高应用性能和用户体验。在实际开发中,还需要结合AsyncTask、IntentService等其他工具灵活运用,以...

    Fragment与Activity使用Handler进行交互

    在Android应用开发中,Fragment和...正确理解和使用Handler能帮助开发者构建高效、稳定的Android应用程序。在实际开发中,还应结合其他通信方式,如Interface回调、EventBus、LiveData等,根据场景选择最适合的方法。

    Android开发工程师面试题之handler详解。android程序员,android开发面试资料,详解

    ### Android开发工程师面试题之Handler详解 在Android开发过程中,Handler是进行线程间通信的重要机制之一,尤其在实现异步任务更新UI等场景中扮演着关键角色。本篇文章将围绕Handler的工作原理、核心组件及其实现...

    android 实例源码 集合

    AsyncTask、Handler、Looper和Thread池等工具的使用,将在实例中得到详解。 8. **数据库SQLite**: 存储和检索本地数据时,SQLite是常用的选择。实例源码会教授如何创建数据库,执行SQL查询,以及如何使用...

    android handler和线程的简单实例

    在我们的实例中,我们可能创建一个新线程来执行后台任务,然后使用`Handler`和`Message`将结果传递回主线程进行UI更新。 下面是一个简单的实例: 1. 创建一个`Handler`对象,通常在主线程中: ```java Handler ...

    Android源代码:HandlerDemo

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

    Android_Handler消息处理机制

    在Android系统中,Handler、Message和Looper构成了一个关键的异步通信机制,即Handler消息处理机制。这个机制允许Android应用程序在不同的线程间传递消息,处理UI更新等操作,是多线程编程中的重要组成部分。下面...

    Android Handler传值的demo

    使用`Handler`的`sendMessage(Message msg)`或`sendMessageDelayed(Message msg, long delayMillis)`方法将`Message`发送到消息队列。这些方法会将消息添加到与`Handler`关联的`Looper`的消息队列中。 5. **Looper...

    Android创意实例详解书籍源码

    7. **多线程与并发**:Android应用需要处理复杂的多线程场景,源码可能包含Handler、AsyncTask、Thread、Service等的使用,以实现后台任务和避免主线程阻塞。 8. **权限管理**:随着Android系统对权限管理的加强,...

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

    总的来说,通过这个实例,你不仅学会了如何在Android Studio中创建一个简单的计时器应用,还掌握了Handler的基本用法。理解并熟练掌握Handler对于进行Android应用开发至关重要,因为它是处理主线程与子线程通信、...

Global site tag (gtag.js) - Google Analytics