Android

Android移除Message的方法分享

2022-10-11
目录 退出Looper循环移除Message的两种方式 removeXXXMessages()移除指定的消息 总结 退出Looper循环移除Message的两种方式 大家都知道,消息机制在Android系统运行中扮演着重要的角色,通过消息发送.添加消息队列.分发等一整个流程驱动Android的运行. 主线程是在ActivityThread.main()中调用了Looper.loop(),开启消息循环遍历执行的,这个消息循环可以退出吗,接下来我们仔细研究下: 上源码: void quit(bool

Android FFmpeg音视频解码播放示例详解

2022-10-10
目录 前言 一丶FFmpeg简介 1.简介 2.FFmpeg两个强大功能 2.1 命令功能 常用参数说明: 二丶FFmpeg音视频解码播放 前言 1.FFmpeg 音视频解码流程 2.FFmpeg 音视频解码原理 2.1.解协议 2.2.解封装 2.3.解码 2.4.音视频同步 2.5.FFmpeg音视频解码 3.FFmpeg接口使用 三丶Clang编译FFmpeg常见问题 1.命令找不到 2.xmakefile 文件没有生成 3.arm-linxu-androideabi-gcc is una

Android 资源加载使用伪代码示例分析

2022-10-10
目录 引言 Resource是什么? 基础概念 getText getDrawable 小结 Tips getColor 总结 引言 聊到 Android 的 资源加载 ,每一个开发同学都会非常熟悉,毕竟从使用来说,我们日常都会见到,比如 getText() 等等. 那如果此时问你,你知道 它们到底是怎么被加载的,内部会有什么处理吗? 为什么同一个drawable界面更改了透明度,其他界面也会生效? 如果你对上述问题依然存疑,那本文可能会对你有所帮助. 介于此,本篇将由浅入深,从源头理清 Res

Android开发Jetpack Compose元素Modifier特性详解

2022-10-10
目录 正文 有序性 不可变性 正文 本文将会介绍Jetpack Compose中的Modifier.在谷歌官方文档中它的描述是这么一句话:Modifier元素是一个有序.不可变的集合,它可以往Jetpack Compose UI元素中添加修饰或者各种行为.例如,背景.填充和单击事件监听器装饰或添加行为到文本或按钮.本文将会从修饰符的两个特性有序和不可变入手来探究修饰符的应用,以下是本文目录: 有序性 不可变性 有序性 官方对修饰符定义的这个特性包含两个层面的意思,一是修饰符的使用是链式的它是有先

Android10 Binder原理概述深入解析

2022-10-09
目录 IPC工具介绍 Pipe Sign message queue shared memory Socket AIDL HIDL IPC工具介绍 Binder作为Android 众多的IPC通讯手段之一,在Framework的数据传输中起到极为关键的作用.为什么Google需要重新创造Binder这么一个IPC工具,使用linux默认提供的Pipe.Socket.共享内存.信号.消息队列等IPC工具不行吗? 答案是 这些传统的linux IPC工具有一部分android也在使用,只是在某些场合

Kotlin对象的懒加载方式by lazy 与 lateinit 异同详解

2022-10-09
目录 前言 lateinit by lazy 总结 前言 属性或对象的延时加载是我们相当常用的,一般我们都是使用 lateinit 和 by lazy 来实现. 他们两者都是延时初始化,那么在使用时那么他们两者有什么区别呢? lateinit 见名知意,延时初始化的标记.lateinit var可以让我们声明一个变量并且不用马上初始化,在我们需要的时候进行手动初始化即可. 如果我们不初始化会怎样? private lateinit var name: String findViewById<Bu

Android&nbsp;10&nbsp;启动分析之init语法详解

2022-10-09
目录 正文 Actions Services Options Triggers Commands Imports 正文 init.rc脚本包含5种类型,Action(动作),Commands(命令), Services(服务),Options(选项), Imports(导入). 以上这些都是基于“行”来解析的,并且用空格隔开关键字. 如果关键字中有空格,处理方法类似于C语言,使用/表示转义,使用""防止关键字被断开,另外需要注意/在末尾表示换行. #开头表示注释. 可以使用语法 ${p

Android10&nbsp;启动Zygote源码解析

2022-10-09
目录 app_main ZygoteInit preload preloadClasses preloadResources preloadSharedLibraries forkSystemServer app_main 上一篇文章: # Android 10 启动分析之servicemanager篇 (二) 在init篇中有提到,init进程会在在Trigger 为late-init的Action中,启动Zygote服务,这篇文章我们就来具体分析一下Zygote服务,去挖掘一下Zygote负

Android10&nbsp;App&nbsp;启动分析进程创建源码解析

2022-10-09
目录 正文 RootActivityContainer ActivityStartController 调用startActivityUnchecked方法 ActivityStackSupervisor 启动进程 RuntimeInit.applicationInit这个方法 正文 从前文# Android 10 启动分析之SystemServer篇 (四)中可以得知,系统在完成所有的初始化工作后,会通过 mAtmInternal.startHomeOnAllDisplays(currentU

Android10&nbsp;启动之SystemServer源码分析

2022-10-09
目录 正文 createSystemContext startBootstrapServices startCoreServices startOtherServices 正文 上一篇文章: # Android 10 启动分析之Zygote篇 (三) 紧接着上一篇文章的内容,我们从这篇文章开始来分析一下 SystemServer. system_server 进程承载着整个framework的核心服务,例如创建 ActivityManagerService.PowerManagerService

Android10 客户端事务管理ClientLifecycleManager源码解析

2022-10-08
目录 正文 ClientLifecycleManager ClientTransaction TransactionExecutor executeLifecycleState 正文 在Android 10 App启动分析之Activity启动篇(二)一文中,简单地介绍了Activity的生命周期管理器是如何调度Activity进入onCreate生命周期的流程.这篇文章,我们将详细地分析framework中activity的生命周期管理功能,从更宏观的角度来更全面地了解生命周期及相关事务的工作

关于Fragment already added问题的解决方案

2022-10-08
目录 Fragment already added问题解决 问题 方法 java.lang.IllegalStateException: Fragment already added 异常处理 小结一下 Fragment already added问题解决 问题 当快速点击切换不同的Fragment的时候部分手机的app竟然挂了, 报出了下面的错误 Fragment already added java.lang.IllegalStateException: Fragment already a

Android Notes思码逸问题处理记录

2022-10-08
目录 前言 Static non-final field names should comply with a naming convention Jump statements should not be redundant Deprecated code should be removed Unused method parameters should be removed [p3c]To judge the equivalence of floating-point numbers, ==

Kotlin&nbsp;Fragment的具体使用详解

2022-10-08
目录 概念 基本示例 设置左右列布局文件 配置左右布局类 主布局文件注册 概念 fragment 可以用作一个 activity 内部的小分块: 当我们从手机转换到 pad 上时,整体界面会发生变化(比如由单列视图变为双列),此时就需要 fragment 的参与了! 基本示例 在本实例中,我们要制作一个双列视图,左右列均为 fragment 构成 设置左右列布局文件 新建布局文件 left_frag.xml 和 right_frag.xml 左列布局我们插入一个按钮并居中: <?xml vers

Flutter Shell自动化打包解放双手

2022-10-08
目录 正文 脚本运行视频 打包流程图 脚本目录讲解 pack.sh(入口) pack_config.sh(全局配置项) 脚本使用 正文 经过一段时间的学习和项目实践,你会发现, 打包->上传蒲公英->生成二维码 是一个枯燥且乏味的事情,只要打包配置项,配置完成,剩下的基本上就是无聊的等待,和机械的步骤. 之前在写iOS项目的时候,一直都是使用fastlane,和xcodebuild,进行脚本打包的. 只是那个时候,只是会简单的打包,并没有深究上传. 最近花时间把flutter自动化打包也给加上

Android&nbsp;10&nbsp;启动Init进程解析

2022-10-07
目录 按下电源键时,android做了啥? init进程解析 FirstStageMain SetupSelinux SecondStageMain init.rc 解析 按下电源键时,android做了啥? 当我们按下电源键时,手机开始上电,并从地址0x00000000处开始执行,而这个地址通常是Bootloader程序的首地址. bootloader是一段裸机程序,是直接与硬件打交道的,其最终目的是“初始化并检测硬件设备,准备好软件环境,最后调用操作系统内核”.除此之外,bootloader

Android&nbsp;10&nbsp;启动之servicemanager源码解析

2022-10-07
目录 正文 获取服务 注册服务 正文 上一篇文章: Android 10 启动分析之Init篇 (一) 在前文提到,init进程会在在Trigger 为init的Action中,启动servicemanager服务,这篇文章我们就来具体分析一下servicemanager服务,它到底做了哪些事情. servicemanager服务的源码位于/frameworks/native/cmds/servicemanager/service_manager.c,我们将从这个类的入口开始看起. int ma

Android10&nbsp;App启动Activity源码分析

2022-10-07
目录 正文 ActivityThread的main方法 Application Context对象 LaunchActivityItem ClientLifecycleManager ClientTransaction TransactionExecutor executeLifecycleState方法 正文 上一篇: Android 10 App启动分析之进程创建篇(一) 上一篇文章,我们探讨了App启动过程中进程创建及初始化的流程,这篇文章我们接着上篇的内容,继续探讨App的Applica

Android&nbsp;JetpackCompose使用教程讲解

2022-10-07
目录 概况 开启新工程 文件结构 根结构 拆分方法 官方四节课教程细节剖析 data class 组件代码翻译 单例类 适配器的替代品 简单小动画 概况 compose 摒弃了原生开发模式中的 xml,代码结构类似于 flutter compose 仅支持 kotlin,虽然这玩意语法糖多但是也不难学 compose 可以通过极短的代码行数构建完善页面 开启新工程 首先请去 android 官网下载 android studio: 官网下载速度是正常的,别担心: 之后根据提示安装 android

Android类加载流程分析

2022-10-05
背景 由于前前前阵子写了个壳,得去了解类的加载流程,当时记了一些潦草的笔记.这几天把这些东西简单梳理了一下,本文分析的代码基于Android8.1.0源码. 流程分析 从loadClass开始,我们来看下Android中类加载的流程 /libcore/ojluni/src/main/java/java/lang/ClassLoader.java::loadClass loadClass流程如下: protected Class<?> loadClass(String name, boolean