`

Handler和Message学习

 
阅读更多

 

个人理解:

 Handler 关联主线程 

 Message 子线程通过Message传递消息与主线程沟通,主线程通过关联的Handler去处理子线程的Message 

 

 一个Handler会允许你发送和处理Message或者Runnable对象关联到一个线程的消息队列MessageQueue中,每一个Handler的实例都会关联一个单一的线程和那个线程的消息队列中。当你创建一个一个新的Handler,它会绑定到你创建的线程和这个线程消息队列中。并且指向好它,它会让消息传递到关联好它的消息队列中,当它从消息队列出队的时候执行它。

对于Handler来说有两种主要的方式: 1. 计划好消息和Runnable将来的某一个时间点来执行它 2. 从一个不同的线程中执行Handler的入队操作。分发消息由下面的几个方法完成:

   1) post(Runnable),
   2) postAtTime(Runnable, long), 
   3) postDelayed(Runnable, long), 
   4) sendEmptyMessage(int), 
   5) sendMessage(Message), 
   6) sendMessageAtTime(Message, long), 
   7) sendMessageDelayed(Message, long)

 

程序处理的时候通过post和sendMessage的方式 

 

   使用实例:

1 主线程中绑定Handler处理器 
2 通过启动一个线程,创建不断修改的消息,然后通过Handler的sendMessage去处理消息 
3 通过Handler可以 对主线程进行处理


    private void showPROGRESS()
    {
        requestWindowFeature(Window.FEATURE_PROGRESS);
        setProgressBarVisibility(true);
        setContentView(R.layout.main);
        setTitle("进度条Title");
        getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
        
        // 通过线程来改变ProgressBar的值
        new Thread(new Runnable() {
            public void run() {
                for (int i = 0; i < 10; i++) {
                    try {
                        Thread.sleep(5000);
                        Message m = Message.obtain();
                        m.what = (i + 1) * 20;
                        WindowFeatureDemoActivity.this.myMessageHandler.sendMessage(m);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }

    Handler myMessageHandler = new Handler() {
        // @Override
        public void handleMessage(Message msg) {

            // 设置标题栏中前景的一个进度条进度值 ,进度条默认10000为100%
            setProgress(100 * msg.what);
            // 设置标题栏中后面的一个进度条进度值 
            setSecondaryProgress(100 * msg.what + 10); 
            super.handleMessage(msg);
        }
    };

 

 

分享到:
评论

相关推荐

    Android中Handler与Message的简单实例

    但是在android的学习中,经常会在一些demo中看到Handler与Message的一些使用,所以Handler与Message的学习也是有必要了。至于学多少,笔者还是比较坚持自己的看法,“用多少,学多少”,毕竟已经有了AsyncTask如此...

    Android应用源码之HandlerMessage1_HandlerMessage.zip

    在Android应用开发中,HandlerMessage1_HandlerMessage是一个关键的主题,涉及到Android系统中的消息处理机制,尤其是Handler、Message和Looper的使用。这些组件是Android异步编程的重要组成部分,用于解决UI线程与...

    Android应用源码之HandlerMessage1.zip

    【Android应用源码之HandlerMessage1.zip】是一个与Android应用程序开发相关的压缩包,重点在于讲解Handler和Message在Android系统中的使用。在这个项目中,我们可能会看到一个简单的Android应用实例,该实例展示了...

    Android应用源码之HandlerMessage3.zip

    在Android应用开发中,HandlerMessage是一个关键的概念,用于在主线程和子线程之间...通过深入研究"Android应用源码之HandlerMessage3.zip",开发者可以更直观地学习到这些概念的实际运用,提升自己的Android编程技能。

    应用源码之HandlerMessage1.zip

    本资料“应用源码之HandlerMessage1.zip”聚焦于这一主题,提供了源码级别的学习材料,帮助开发者深入理解Android异步编程的核心。 首先,我们来探讨`Handler`。`Handler`是Android中的一个类,它允许开发者在不同...

    应用源码之HandlerMessage2.zip

    通过对`HandlerMessage2.zip`中的源码进行深入学习,你可以更好地理解和掌握Android中的线程通信机制,这对于进行复杂的UI更新和异步任务处理至关重要。同时,这样的实践也能提升你的毕业设计质量和代码能力。

    应用源码之HandlerMessage3.zip

    通过学习和分析“应用源码之HandlerMessage3”的源码,开发者可以更好地理解和掌握Android中线程通信的核心技术,提升应用的性能和用户体验。在毕业设计或代码学习项目中,熟练运用这些知识,能够解决许多实际问题,...

    安卓Android源码——HandlerMessage2.rar

    在"安卓Android源码——HandlerMessage2.rar"中,你可能会找到关于这些概念的实际代码示例,这将有助于你从实践中学习和掌握`Handler`、`Message`的使用方法。通过分析和调试这些代码,你将能够更好地理解Android...

    安卓Android源码——HandlerMessage1.rar

    通过对 `HandlerMessage1.rar` 中的源码进行学习,开发者可以更深入地了解这些组件的内部实现,以及如何高效地利用它们来实现异步操作和线程间的通信。这将有助于提高安卓应用的性能和用户体验。

    Androdi msg handler looper学习源码

    本学习源码着重关注的是Handler和Looper的交互过程,以及它们如何协同工作来处理应用程序中的消息。下面将详细阐述这些概念。 1. **Handler**:Handler是Android中用于在不同线程之间发送和处理消息的对象。开发者...

    Android 异步处理 Handler+Looper+MessageQueue深入详解

    在Android开发中,异步处理是一项至关重要的技术,它能够帮助开发者解决主线程阻塞问题,提高应用的响应性和用户体验。Handler、Looper和MessageQueue是...通过不断学习和实践,你将能够更好地掌握这一核心技术。

    handler的简单示例

    在Android开发中,Handler是一种非常重要的机制,它用于在主线程中处理来自其他线程的消息,从而实现线程间通信,尤其是对UI...通过实践和学习更多关于Handler的知识,开发者可以更好地掌握Android应用的异步编程技巧。

    android handler 机制 源码

    在Android系统中,Handler、Looper和Message构成了一个用于线程间通信的重要机制。这个机制使得UI线程可以处理来自其他线程的消息,从而避免了直接在非UI线程操作UI组件,防止应用出现ANR(Application Not ...

    关于Thread和Handler的使用(一)

    Handler是Android消息传递机制的一部分,它允许我们发送和处理Message或Runnable对象。通常,我们在主线程中创建一个Handler实例,然后在其他线程中通过这个Handler发送消息。Handler有`handleMessage(Message)`方法...

    Handlerjava代码实现

    通过学习和分析这些代码,你可以更好地理解`Handler`的工作原理和使用方式,从而在自己的项目中灵活运用这一强大的工具。记住,合理利用`Handler`可以有效避免ANR(Application Not Responding)错误,提升应用的...

    仿写handler机制

    Handler、Looper和MessageQueue是Android系统中用于实现线程间通信的关键组件,它们共同构成了Android的消息处理机制。这里我们将深入探讨这些概念,并通过一个仿写Handler机制的例子来理解其工作原理。 首先,我们...

    android线程 Handler Message Queue AsyncTask线程模型 线程交互 + 修改Button样式 示例 最终easy整合版

    本文将深入探讨Android中的线程模型,重点讲解Handler、Message Queue和AsyncTask,并提供修改Button样式的示例以及如何将这些概念整合到一个易用的方案中。 1. **Android线程模型** Android系统的主线程,也称为...

    xamarin学习笔记A13(安卓Handler异步消息处理)

    这就引出了如何在后台线程完成工作并安全地更新UI的问题,这时就需要用到Handler、Looper和Message三个关键组件。 二、Handler机制 1. Handler:是消息处理的核心,它定义了一个消息队列,并处理来自该队列的消息...

    Android和Handler那些事

    `Handler`是Android中用于消息传递和线程间通信的一种机制,通常配合`Looper`和`Message`一起工作。当在后台线程(如`Thread`或`AsyncTask`)中执行任务时,可以通过`Handler`将结果发送到主线程,并在主线程中更新...

Global site tag (gtag.js) - Google Analytics