Android Handler 原理-Handler

  • Adamin90
  • 2021-09-25 12:11:55
  • Android
Handler机制是安卓消息循环机制的基石,Handler是Handler机制的指挥者 Handler发送消息方式有两个版本,post和send,post版本发送一个runnable对象,send直接发送Message对象,post和send最终都调用了MessageQueue的enqueueMessage方法。 Handler处理消息的方法是dispatchMessge方法,优先处理msg.callback,其次是Handler的mCallback对象,最后才是handleMessage方法。 Handler移除消息的方法最终都是调用MessageQueue的移除方法。 HandlerThread继承自Thread,简化了在子线程创建Handler的过程,run方法自动调用Looper.prepare和Looper.loop。
阅读全文

Android Handler 原理-Looper

  • Adamin90
  • 2021-09-21 13:08:26
  • Android
Looper主要通过loop方法从MessageQueue中循环获取消息,然后交给Handler处理。 在线程中要先使用Looper.prepare方法创建Looper,再调用Looper.loop方法获取和处理消息。 Android主线程的Looper实在ActivitiyThread的main方法中通过Looper.prepareMainLooper初始化的。
阅读全文

Android Handler原理-MessageQueue

  • Adamin90
  • 2021-09-19 21:59:28
  • Android
MessageQueue负责消息的入队(enQueueMessage)和出队(next),通过Handler间接操作入队,Looper.loop调用next方法循环出队,MessageQueue的初始化在Looper的prepare或prepareMainLooper方法中,mainLooper定义消息队列不可退出。MessageQueue内大部分操作是native层操作,基于epoll机制。同步屏障可以使异步消息优先执行。 MessageQueue内的IdleHandler可以注册为闲时执行,闲的意思使消息队列无消息,或者消息未达到执行时间。
阅读全文

Anroid Handler原理-Message

  • Adamin90
  • 2021-09-16 14:31:02
  • Android
Message是安卓消息传递机制信息的载体,他内部维护了一个链表,指向下一个,维护了一个缓存队列,最多缓存50个对象,避免重复创建对象,Message回收使用了享元模式的设计模式,Message回收会把flags标识成FLAG_IN_USE,消息入队也会标识成IN_USE,获取Message对象一般使用Message.obtain()方法,内部会清空flags标识。 Message默认是同步消息,遵循Looper的同步消息屏障,我们可以通过setAsynchronous方法把消息设置成异步,突破消息屏障,让它优先执行。
阅读全文

Android Studio Arctic Fox 原生项目集成Flutter模块Failed to apply plugin class 'FlutterPlugin'

Android Studio 升级Arctic Fox后原生项目集成Flutter module报错:Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin class 'FlutterPlugin'. Caused by: org.gradle.api.InvalidUserCodeException: Build was configured to prefer settings repositories over project repositories but repository 'maven' was added by plugin class 'FlutterPlugin'
阅读全文

Flutter 集成到现有的安卓原生项目中-集成方式

安卓原生项目集成flutter由两种方式: Android Studio菜单集成File>New>Module创建或选择Flutter module,Android Studio会自动配置和依赖模块 手动集成 执行flutter create -t module --org com.adamin module_name创建模块 依赖集成方式有两种,aar或源码依赖方式。
阅读全文

Java必备基础知识备忘整理

  • Adamin90
  • 2021-07-16 14:58:26
  • Java
8大数据类型byte/8 char/16 short/16 int/32 float/32 long/64 double/64 boolean/~new Integer(2333)和 Integer.valueOf(2333)区别使用new关键字创建每次都会创建一个新对象,而使用Integer.valueOf会从缓存池获取引用对
阅读全文

数据结构基础-链表

数据结构基础-链表(linked list)链表在数据结构中通常用来实现其他的数据结构,它是一个节点序列,其中每个节点存储自己的数据和指向下一个节点位置的指针(地址),可以被想象成一个链接链: 列表中最后一项有一个指向NULL的链接,表示链的结尾。优点(与数组对比)尽管链表有点像数组,但是它不限制声明元素的长度数组需要把数据存储在连续的内存或者磁盘上,链表不需要链表插入和移除元素更高效,不需要重新
阅读全文

flutter2接入高德地图定位,工具类封装,打包安卓apk,自定义签名

flutter 高德定位接入过程和工具类封装
阅读全文

markdown 常用语法

一至六级标题分别对应一到六个#,然后加一个空格,举例# 一级标题## 二级标题### 三级标题#### 四级标题##### 五级标题###### 六级标题效果如下:一级标题二级标题三级标题四级标题五级标题六级标题  文字加粗,要加粗的文字左右两边加两个*,不能带空改 :**加粗文字**效果 加粗文字文字斜体,文字左右两边加1个*,不能带空改:*斜体*效果 斜体文字文字加粗并斜体,文字左右
阅读全文
  • Powered by bjyblog modified by Adam © 2014-2021 www.lixiaopeng.com 版权所有 ICP证:鲁ICP备15039297号
  • 联系邮箱:14846869@qq.com