`
surecn
  • 浏览: 6460 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Android消息循环

 
阅读更多

消息循环的基本使用

public void run() {
    mTid = Process.myTid();
    Looper.prepare();
    synchronized (this) {
        mLooper = Looper.myLooper();
        notifyAll();
    }
    Process.setThreadPriority(mPriority);
    onLooperPrepared();
    Looper.loop();
    mTid = -1;
}

1. Looper.prepare()消息循环的初始化流程 如图所示


 

 

2. Looper.loop()  进入消息循环.

queue.next(); 获取可以处理的消息

 在next函数中会先调用nativePollOnce(nextPollTimeoutMills)处理native层的消息队列, 如果nextPollTimeoutMills !=0  表示在处理完native消息之后及空闲消息后,线程进入休眠状态

 

msg.target.dispatchMessage(msg);  对获取的消息进行处理

 

3.发送消息

在MessageQueue.enqueueMessage方法中,如果队列为空,或执行时间为0 或执行时间小于头部消息的,将消息放到队列头部,其他情况将消息按执行时间顺序插入队列合适位置

如果消息消息放在队列头部并且所需执行的线程处于休眠状态,则会调用nativeWake唤醒线程,更新休眠时间

在调用nativeWake中,最终会调用write(mWakeEventFd, &inc, sizeof(uint64_t)),向目标线程发送一个唤醒的信号

 

 

 

 

 

  • 大小: 137.3 KB
分享到:
评论

相关推荐

    Android消息循环机制源码深入理解

    在Android系统中,消息循环机制是实现线程间通信的核心组件,它允许应用程序在不同的线程之间传递消息,尤其在处理UI更新时至关重要。本文将深入解析Android消息循环的源码,帮助读者理解其工作原理。 首先,...

    Android无限循环RecyclerView的完美实现方案

    Android 无限循环 RecyclerView 实现方案详解 Android 无限循环 RecyclerView 的实现方案是 Android 开发中常见的需求,特别是在实现无限循环的横向列表时。下面我们将详细介绍两种常见的实现方案,并对其进行比较...

    Android之循环队列操作

    同时,这也为你提供了一个基础,以便进一步研究更复杂的数据结构和算法,如链式循环队列,以及在Android应用中的实际应用,如消息队列、任务调度等。 总的来说,理解和掌握循环队列在Android开发中是非常重要的,它...

    Android代码-Android 一些重要知识点解析整理

    Android消息循环分析 Android Activity developer 官网 (强烈推荐 dev guide) Android的启动模式(android:launchMode) Activity 的启动模式(android:launchMode) Android Activity 的四种启动模式 ...

    Android的消息处理机制--Looper,Handler

    首先,`Looper`是Android消息循环的核心。它的主要任务是不断地从`MessageQueue`中取出`Message`对象,并将其分发给相应的`Handler`进行处理。`Looper`的构造函数是私有的,目的是为了防止直接实例化,而是通过`...

    Android的消息处理机制

    Looper是Android消息循环机制的核心。每个线程可以有自己的Looper对象,从而拥有自己的消息队列。Looper的主要作用是管理线程的消息队列,并负责不断从消息队列中取出消息交给相应的Handler处理。 ##### 2. Handler...

    android gif图片循环显示

    总结,实现“android gif图片循环显示”主要涉及Android第三方库的使用,特别是`GIFView`库,以及如何在代码中加载、切换和控制GIF动画。理解这些知识点对于提升Android开发技能和应对实际项目需求非常重要。通过...

    android左右循环滑动效果

    在Android开发中,实现左右循环滑动的效果是一种常见的需求,特别是在设计各种滚动列表或轮播图时。这种效果能够提供用户友好的体验,使他们能够方便地浏览内容。本项目的核心在于实现一个可无限循环的滑动视图,让...

    Android MediaPlayer 自定义循环次数

    在Android开发中,MediaPlayer是处理音频和视频播放的核心类之一,它提供了丰富的API来控制多媒体文件的播放。本文将深入探讨如何使用MediaPlayer自定义循环播放的次数,这在需要重复播放特定音频片段的应用场景中...

    android动画循环移动

    "android动画循环移动"是一个关于如何在Android平台上实现元素连续、循环移动的示例。这个demo展示了如何利用Android的动画框架来创建平移效果,并让动画无缝地交替播放,常用于屏保或者动态界面的设计。 首先,...

    Android 之 Looper、MessageQueue、Handler 与消息循环

    ### Android之Looper、MessageQueue、Handler与消息循环详解 #### 一、概述 在Android开发过程中,消息处理机制是至关重要的部分,它涉及到应用程序如何管理、传递和响应各种事件。本篇文章将深入探讨Android中...

    Android 完美的listview自动循环滚动

    "Android 完美的listview自动循环滚动"这个主题聚焦于如何使ListView在到达列表末尾时能够自动循环回滚到顶部,实现类似轮播的效果。这种功能常见于广告轮播、商品推荐等场景,可以提供流畅且连续的用户体验。 首先...

    Android手机循环重启脚本

    通过python控制Android手机循环重启,不断重启的脚本 import os import sys import time count = 100 num = 0 while count > 0 : count -= 1 os.system('adb devices')

    Android消息机制

    Android的消息系统包含五个基本要素:消息队列(MessageQueue)、发送消息(Message)、消息读取(Looper)、消息分发(Handler)和消息循环线程。消息循环系统依赖于消息循环来不断地轮询消息队列,如果有新的消息,则调用...

    安卓Android源码——HandlerLooper1.rar

    接着,`Looper`是Android消息循环的核心。每个线程都有一个与之关联的`Looper`对象,但默认情况下,只有主线程有`Looper`。`Looper.prepare()`方法用于初始化线程的消息循环,而`Looper.loop()`则会进入这个循环,...

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

    `Looper`是Android消息循环的核心,它负责接收并分发消息。主线程默认已经有一个Looper,但非主线程需要手动创建和启动Looper,才能使用Handler。 现在,我们来看一个具体的实例: 1. 首先,我们需要在主线程中...

    android中几种for循环的效率

    在网上看了一些for循环的效率问题,发现基本上都是一些理论的东西,且大多都是Copy来的,前后文自相矛盾。自己做了一个例子,来看看他们的效率 1.最慢 private long getTime1() { long time = 0; int count = 0;...

    Android6.0 消息机制原理解析

    消息都是存放在一个消息队列中去,而消息循环线程就是围绕这个消息队列进入一个无限循环的,直到线程退出。如果队列中有消息,消息循环线程就会把它取出来,并分发给相应的Handler进行处理;如果队列中没有消息,...

Global site tag (gtag.js) - Google Analytics