自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Lud的博客

积累点滴

  • 博客(208)
  • 资源 (15)
  • 收藏
  • 关注

原创 Android Framework学习目录

Framework 积累学习

2022-03-14 20:16:04 2101 2

原创 Bug Notes online

文章目录Kotlin调用Long类型的HashCode导致线上CrashKotlin调用Long类型的HashCode导致线上CrashCaused by: java.lang.NoSuchMethodError: No static method hashCode(J)I in class Ljava/lang/Long; or its super classes (declaration of ‘java.lang.Long’ appears in /system/framework/core-

2021-08-28 14:43:58 122

原创 深入理解Java虚拟机

Java虚拟机-程序计数器

2021-04-10 18:10:40 122

原创 AudioManager 相关功能实现

当插入有线耳机时,系统默认会自动将音频路由到有线耳机进行播放,此时如果想要切换到手机扬声器播放音频,可以使用 AudioManager 的 setWiredDeviceConnectionState() 方法来模拟拔出有线耳机的操作,从而将音频路由切换到手机扬声器。先获取 AudioManager,然后获取device列表,里面根据type区分device 类型,我这里选择的蓝牙协议。然后根据不同的 api 版本选择对应的方法设置device,我这里用的api31以上的。

2023-05-08 12:41:58 884 1

原创 Android 原生播放音频有哪些方式

使用 MediaPlayerMediaPlayer特点关于 SoundPool关于 AudioTrack关于 AudioRecordAudioRecord 降噪

2023-05-07 18:05:31 1473 4

原创 Android TTS播报音频并且配合AudioManager压低其他音频声音

TTS播放音频,AudioManager 和 AudioFocusManager 控制音频播放音量和焦点。

2023-05-07 16:21:48 3693

原创 关于近期对项目性能和稳定性优化的总结

重构原因重构步骤代码结构卡顿优化CPU 线程相关内存优化其他优化序列化取消单例模式接口隔离的好处代码注释和命名规范并发引起的数据问题谋定而后动

2023-04-20 18:20:28 184

原创 Android P以后为什么有的系统方法通过反射也调用不到了?

Android P以后对反射做了什么限制?有没有什么解决方案。

2023-03-11 18:21:54 988

原创 android 怎样跨进程传递大图?Intent 也是采用 binder传递数据,为什么会被限制大小呢?直接使用 binder 呢?

跨进程传递大图有哪些方案TransactionTooLargeExceptionBitmap 是怎么传输的为什么 intent 带大图异常,但是 binder 传输就没有问题呢?

2023-02-16 20:44:16 1403

原创 深入理解 Handler(java 层 + native 层)

线程消息队列时怎样实现的消息是怎么传递的?Handle 的延迟消息是怎么处理的?IdleHandler 的原理主线程进入了 Looper 循环为什么没有 ANR?消息屏障是什么?

2023-02-14 21:32:02 1818 1

原创 Binder 跨进程传递对象的原理

1. binder 传递有哪些方式 2. binder 在传递过程中是怎样存储的 3. binder 对象序列化和反序列化的过程 4. binder 对象在传递过程中驱动做了什么

2023-02-08 01:05:19 849

原创 android一次完整的 IPC 通信流程是怎样的?

1. binder 整体的架构原理 2. 了解应用和binder驱动的交互原理(client 端和 Server 端与binder驱动的交互是不一样的) 3. 了解 IPC 过程中的通信协议

2023-02-04 17:19:10 782

原创 浅谈对 Binder 的理解

1. binder 是干嘛的 2. binder 的存在意义是怎样的 3. Android 为什么选择 binder 作为主要的 ipc 通信机制? 4. binder 的架构

2023-01-29 18:31:08 370

原创 android Framework 中用到了哪些跨进程通信方式?

我们常用的AMS,PMS 等都是通过Binder机制来完成跨进程通信的,那么除了Binder ,Linux 还有其他跨进程通信的方式可以选择?

2022-11-30 02:06:26 767

原创 Android Surface 是如何跨进程传递的?

也就是 SurfaceControl 中有一个 mGraphicBufferProducer 然后根据 mGraphicBufferProducer 创建了一个native 层 Surface 对象,然后将 native 层的 Surface 对象的指针,保存到 Java 层 Surface 对象中。因为Java层对象中保存了一个 native 层对象的指针。上面方法创建了 native 层的 surface 对象 并且和Java层的surface 层对象绑定一起,在创建对象的时候,

2022-11-17 21:48:32 1554

原创 Android UI 刷新机制

之前在中大概了解过 Android 的刷新机制,今天再带着问题了解一下 Android UI 的刷新机制。

2022-11-10 23:21:42 578

原创 Android 广播的注册和收发原理

静态广播和动态广播的分发接收原理

2022-10-29 17:40:22 1025

原创 Android 深入理解 Service 的启动和绑定

Android 深入理解 Service 的启动和绑定

2022-10-26 00:22:49 1706

原创 Android 应用的 UI 线程是怎么启动的?

- 什么是 UI 线程- UI 线程的启动流程,消息循环是怎么创建的- 连接 Android 的显示原理,UI 线程和 UI 之间是怎么关联的

2022-10-23 16:53:29 830

原创 谈一谈对 Android Context 的理解

Application、Activity、Service、BroadCastReceiver、ContentProvider 的 Context 有什么区别?

2022-10-22 02:13:13 898

原创 谈一谈 Android Application 的理解

Application的理解,作用,初始化原理等。

2022-10-19 20:43:25 887

原创 Android 应用是如何启动 binder 机制的?

应用启动binder机制的流程?

2022-10-18 14:36:48 703

原创 你知道怎样添加一个Android的系统服务么?它和binder应用服务有什么区别?

- 了解如何使用系统服务- 了解系统服务使用的基本原理- 了解服务的注册过程

2022-10-12 20:26:45 608

原创 跨进程通信--共享内存(ashmem)实例

提到过,ashmem 通信原理是每个进程打开同一个文件,所以文件描述符需要通过其他方式传递给其他进程,所以这里采用了 Service + aidl 的方式把共享内存的文件描述符传递过去。然后客户端获取到的文件描述符读取该内存下的内容具体步骤如下:其中 MemoryFile 是通过 ashmem 实现的。ParcelFileDescriptor 实现了Parcelable 所以可以通过binder传输。...

2022-08-17 20:02:48 706

原创 匿名共享内存 ashmem

mmap 是 Linux 中最为大家熟悉的共享内存方式。通过打开同一个文件,并且使用 MAP_SHARED 标志来调用 mmap() 函数,两个进程就能共享一片内存空间了。但是这种方式存在一个问题,如果分配的空间有一部分不需要了,不能单独释放这些不再使用的“物理内存”,为什么是物理内存呢,因为mmap分配的是地址空间,只有当进程存取某个页面时,才会去分配实际物理内存。这些物理内存只能通过 munmap() 一次性的释放掉。如果某个页面的物理内存不需要了,想把他单独释放,传统的 mmap 时无法做到的。...

2022-08-07 15:33:08 1569

原创 ServiceManager 的作用、启动流程和工作原理

ServiceManager 的架构非常简单,只有一个循环来处理消息。没有像 libbinder 中需要多线程去处理配合整个流程。从上面的代码来看 ServiceManager 主要提供 注册 binder 服务、查询 binder 服务 和 获取 binder 服务。do_add_service() 的流程主要是先检查进程是否有权限注册,接着查看是否已经注册过服务,如果已经存在则在驱动中引动计数器-1,不存在则创建一个svcinfo 的结构,把服务的名称存入结构中,...

2022-07-07 23:40:55 3086 1

原创 Android 进程间通信- Binder基础概述

Binder 基础概念

2022-06-04 15:37:18 580

原创 通过Intent查询组件

PMS 在系统运行过程中,很重要的一项工作就是通过 Intent 来查询组件信息。系统中响应 Intent 的组件有多个,所以返回的是列表而不是单个(比如 intent 启动的时候会让你自己选择启动哪个app,多个地图软件,多个邮箱软件等),查到的组件都是用类 ResolveInfo 来表示的,为了统一所有的组件都通过它来表示;PMS 中 Intent查询接口如下 @Override public @NonNull ParceledListSlice<ResolveInfo&gt.

2022-05-15 16:32:43 443

原创 android 卸载应用流程

文章目录如果在手机中卸载会有提示卸载页面等,这个一般是 UninstallerActivity;在这里点击卸载调用的是下面代码:ActivityThread.getPackageManager().getPackageInstaller().uninstall( new VersionedPackage(mDialogInfo.appInfo.packageName, PackageMan

2022-05-12 11:17:43 2505

原创 android 安装应用过程

文章目录管理会话的服务 - PackageInstallerService安装应用的开端应用安装的第一阶段-复制文件第二阶段-装载应用PMS 在创建的时候创建了PackageInstallerService,所以在安装应用之前先了解一下 PackageInstallerService :用于管理安装的服务附带的是 Android 9.0 的源码管理会话的服务 - PackageInstallerServicePackageInstallerService 主要用于管理安装会话服务,可以通过

2022-05-04 17:12:32 2296

原创 关于 PackageManagerService

文章目录了解 PackageManagerService了解 pm/Settings.java服务初始化过程处理 permission 文件扫描应用目录的过程当发出 Intent 时,如果系统中应用有多个相应,会弹出一个对话框让你选择?解析 APKAndroid 中的应用简单可以分为两大类:系统应用和普通应用。系统应用:系统应用是指 /system/app 或者 /system/priv-app 目录下的应用。priv-app 是4.4以后出现的,用来存放一些系统底层应用,比如 Setting、

2022-04-30 15:41:52 673

原创 SystemServer 中的 WatchDog

文章目录启动 WatchDogWatchDog 监控的服务和线程WatchDog 实现原理对于系统而言,大家都希望一直不出问题,但是很难保证一点不出问题。一但出问题,重启可以解决大部分的问题,因此最简单的办法是检测到了系统不正常了重启设备就好了。WatchDog 看门狗就是用来监测系统是否出问题而诞生的。工作原理是:软件系统必须定时像看门狗硬件中写入值来表示自己没出故障,俗称喂狗;否则超过了时间没有写入数据则重启设备。Android 的SystemServer 是一个复杂的进程,它启动了几十种服务,是最

2022-04-07 00:31:19 1023

原创 Android SystemServer 进程

SystemServer 是系统的核心之一,大部分android提供的服务都运行在这个进程中,SystemServer 中运行的服务大概有八十多种。为了防止应用进程对系统造成破坏,Android应用进程没有权限直接访问设备的底层资源,只能通过 SystemServer 中的服务代理访问。通过 Binder 用户进程使用 SystemServer 中的服务并没有太多不便之处。

2022-04-02 16:52:47 3615

原创 Zygote 启动应用程序流程

注册 Zygote 的 socket请求启动应用处理启动应用请求fork() 应用进程子进程初始化

2022-03-27 17:00:11 3549

原创 Android Framework- Zygote进程以及其初始化

文章目录Zygote 概述Zygote 进程的初始化app_process 的 main 函数main函数启动流程启动虚拟机 AndroidRuntime类启动虚拟机初始化工作 ZygoteInit 类Zygote 概述Zygote 时android中非常重要的一个进程,它和 init 进程、SystemServer 进程同为支持Android最重要的进程。、Linux 的进程时通过系统调用 fork 产生的,fork 出的子进程除了内核中的一些核心数据结构和父进程不同外,其余的内存影像都是和父进程

2022-03-20 14:46:54 3939

原创 Android Framework- Android 第一个用户进程:Init进程(概述)

文章目录概述Bootloader 引导装载和启动 Linux 内核启动 Init 进程(基于 Android9 源码)Init 进程的初始化过程main 函数执行流程解析启动 init.rcinit 文件格式介绍init 进程对信号的处理概述在介绍 Init 之前,先了解一下Android系统的启动过程。从系统角度看,android 系统启动大概分为三个大阶段:bootloader引导、装载,和启动Linux内核,启动Android系统三个大的阶段。其中Android系统的启动还可以分为 启动 Ini

2022-03-14 20:14:10 4776

原创 HashMap 源码细节解析

文章目录new HashMap<>(); 初始化过程首次 hashMap.put("key", "value"); 创建空间过程非首次调用 hashMap.put("key", "value"); 插入值和扩容的逻辑分析 get 流程:hashMap.get("key");分析 remove 流程:hashMap.remove("key");往红黑树中插入值将链表转换为红黑树:treeifyBin(tab, hash);从红黑树中读取操作HashMap 常被问到的问题分析JDK版本:15.0.

2021-12-19 19:16:18 440

原创 Android性能优化(总结优化点)

文章目录概述APP启动优化APP内存优化APP布局优化APP卡顿优化APP线程优化APP网络优化APP电量优化APP apk瘦身优化APP稳定性优化APP专项技术优化概述总结性的内容,总结了一些优化可以注意的点。APP启动优化启动优化思想APP内存优化内存检测 (查找内存泄漏和对象数量分配)Android Profile (直观,新版本可以直接查看最近一次GC Route路线,对查找内存泄漏问题很好用)Memory Analyzer(MAT):查找引用和内存泄漏比较方便Leak

2021-10-14 21:06:28 1898

原创 Android性能优化-启动优化思想

文章目录启动时间测量方式通过adb命令启动时间测量方式通过adb命令adb shell am start -W [PackageName]/com.[packageName].SplashActivity注意:前面部分时你的 applicationId 在 gradle中配置的 ,测试的就是debug的id,release的就是release的。后面是你对应启动activity的package+activity具体路径(必须是在AndroidManifest.xml中配置了如下配置)<in

2021-08-26 20:58:48 214

原创 Mac android 导出anr文件

通过adb命令进入adb shell(需要配置adb环境变量)adb shell然后会进入如下状态starqlteue:/ $ 进入anr文件夹1|starqlteue:/ $ cd data/anr查看文件夹starqlteue:/data/anr $ ls -alltotal 7428drwxrwxr-x 2 system system 4096 2021-08-19 14:23:54.181624098 +0800 .drwxrwx--x 68 syste.

2021-08-19 14:50:24 362

Plugin.zip

代码是Android插件化代码,采用了插桩的方式。一个简单的demo ,有activity receiver 和 broadcast 等

2020-04-17

Component-based.zip

demo中是配置了gradle基础配置,包括 各个模块的例子 base 还有各种core模块,其中 module1进行了application处理

2020-04-13

MvpNet.zip

MVP设计模式,提取了commonLIb,建立中间层,封装了网络框架,一行代码切换网络访问使用的框架。

2020-04-09

MyApplication.zip

代码是抽离了MVP架构,包括baseActivity basePresenter 等和使用实例。同时做了防止内存泄漏的处理

2020-04-08

MyApplication.zip

通过使用 aspectjrt 来完成 AOP 方式的 点击跳转是否登录功能,比oop方式比,使用方便,一个注解就搞定了

2020-04-02

Flutter 实战高清PDF版(非图片版).7z

Flutter实战,超清版PDF版(非 图片版,可复制文字),作者。。wendux

2019-07-07

底部列表Dialog.7z

底部列表dialog,可以传入不同的bean类,只要添加注解即可识别不同的bean要展示的item,简单方便,可以避免因不同接口返回数据结构不同而单独处理数据问题。

2019-06-26

Android开发艺术探索.7z

android开发艺术探索PDF高清版(非扫描版,可复制清晰放大)

2019-06-07

Kotlin从入门到进阶实战.7z

Kotlin入门到实战, 阿里巴巴 程序员著作。适合零基础到提升的同学学习

2019-06-06

Binder连接池Demo

Binder连接池能够很大程度上优化多个AIDL接口访问服务的效率,此demo是Binder连接池的基本用法分为服务端和客户端

2019-03-28

仿iOS圆角弹出框

仿iOS圆角提示框

2016-09-23

自定义WIFI发射效果 雷达发射效果

自定义View WIFI发射效果,类似于雷达的效果

2016-09-14

ScrollView嵌套ScrollView滑动

ScrollView 嵌套ScrollView 事件分发问题

2016-09-14

Android 底部弹出dialog+动画

底部弹出dialog 添加简单的进入 退出动画

2016-09-09

购物车数量加减,并统计选中数量和选中总价

购物车,listview列表,点击+ - 号 增加减少数量,计算单个条目总价,点击checkbox选中,并统计选中数量,统计选中所有商品的总价。

2016-08-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除