- 博客(88)
- 资源 (3)
- 收藏
- 关注
原创 协程coroutineScope?.launch 和 ArchTaskExecutor 开子线程的区别
play())都运行在 IO 线程池的某个线程上,不会阻塞调用者线程(这里是主线程)。响应回来后协程恢复执行。简单说:协程用更少的线程资源实现同样的异步效果,并且提供了更好的生命周期控制和错误隔离。ArchTaskExecutor:如果用 executeOnBackgroundThread { ... } 包同样的逻辑,线程在等待 execute 返回期间被完全阻塞占用,是一种更"重"的资源使用方式。Dispatchers.IO:所有通过该 scope launch 的协程默认运行在 IO 线程池上。
2026-09-10 09:24:46
49
原创 android compose ui 结合 ViewModel适配方案
如下以ExposedDropdownMenuBox下拉框控件为例子,描述android compose ui 结合 ViewModel适配方案。
2026-01-24 14:46:06
753
原创 android gradle中如何引用 libs.versions.toml中定义的版本变量添加compose引用
enableFeaturePreview('VERSION_CATALOGS') // 启用版本目录功能预览。3.引用版本变量 配置compose引用库。1.启用版本目录功能预览。
2025-12-27 14:41:55
379
原创 Android 弹窗 显示背景高斯模糊效果(Android12以后版本)
Android SurfaceControl.Transaction 类是管理和批量执行 Surface 属性变更的核心工具,专门用于高效处理窗口和视图的图形效果。Transaction 主要负责将多个 Surface 操作组合成一个原子事务,确保图形系统能够一次性应用所有变更,避免画面撕裂和不一致问题。注意不是给view设置了高斯模糊背景,而是给view所在的activity外部容器设置了高斯模糊背景。设置view背景区域高斯模糊,指定模糊半径和圆角。设置高斯模糊的强度,通常20-80像素效果最佳。
2025-11-27 15:08:44
485
原创 ubuntu:beyond compare 4 This license key has been revoked 解决办法
单击右下角按钮“Enter Key”,输入以下秘钥【注意:包括开始和结尾的横线行】3.打开Beyond Conpare,弹出Trial Mode Error!1.在terminal界面找到bcompare所在位置,并删除目录。
2025-11-14 16:47:49
824
原创 Android bind service使用Binder 池的方法
1.创建aidl文件,创建单独的aidl仓库,在aidl仓库添加如下aidl文件 包括:1.1 主aidl文件 IIpcService.aidl(IpcService.onBind直接返回IIpcService接口实现),提供Binder 池获取方法。1.2 客户端监听aidl文件 IIpcServiceListener.aidl,用于客户端向服务端注册监听。1.3 Binder 池中模块1 aidl文件 IBinderModule1.aidl,处理模块1业务。
2025-10-23 19:02:12
468
原创 Androidstudio 上传当前module 或本地jar包到maven服务器。
或者双击gralde面板中publishing目录下的 publishAllPublicationsToMavenRepository。设置agp版本和maven插件版本(和gralde版本有对应关系)即可上传 模块目录下 libs/aa.jar文件到maven服务器。Androidstudio 将本地jar包上传到maven服务器。3.设置模块目录的build.gradle。2.设置项目根目录build.gradle。1.设置gradle版本到8.0。
2025-07-25 14:53:05
502
原创 ubuntu 运行脚本打开WIFI adb
2.给脚本添加执行权限:chmod +x adb_tcp_connect.sh。1.将如下述代码保存为adb_tcp_connect.sh文件。3.运行脚本:./adb_tcp_connect.sh。
2025-07-08 13:51:42
302
原创 Android混淆工具使用
当混淆后的应用发生崩溃时,日志显示混淆名称(如 a.b.c.d.a())。使用 mapping.txt 配合反混淆工具(如 retrace)可将堆栈还原为原始代码位置,便于定位问题.进入android sdk的目录,执行如下命令,将混淆后的trace.txt 转换成免混淆的日志。记录了混淆编译过程中被识别为冗余代码(未使用代码)并被移除的类、方法和字段。文件记录了被明确保留(未被混淆)的类、方法和字段。
2025-06-18 15:05:58
721
原创 Android Cameara2 + MediaRecorder 完成录像功能
打开相机预览流程是Camera2的默认流程可参考:https://blog.youkuaiyun.com/kk3087961/article/details/135616576。
2025-05-27 14:29:26
1068
原创 Android 应用wifi direct连接通信实现
1.必须启用Wi-Fi功能:在设备设置中开启Wi-Fi主开关(即使未连接路由器)关闭冲突功能:若已开启「热点共享」或连接到其他Wi-Fi网络,需先关闭相关功能以避免硬件占.-- Wi-Fi Direct 核心权限 -->-- Android 10+ 需位置权限 -->1.1.代码调用打开WIFI// 获取Wi-Fi管理器实例// 开启Wi-Fiif (!
2025-04-19 16:56:00
1870
原创 Android 应用蓝牙连接通信实现
Log.d("Bluetooth", "发现设备: " + device.getName() + " - " + device.getAddress());//配对过后,创建RFCOMM Socket并连接到服务:使用UUID指定服务标识符,创建RFCOMM Socket并连接到远程设备。// 获取已连接设备的MAC地址。//name:字符串参数,表示服务的名称,这个名称会被写入设备的SDP(服务发现协议)数据库。1. 客户端设备(主动发起连接的设备)创建RFCOMM Socket并连接 连接远程设备。
2025-04-10 19:07:21
1622
原创 Android 系统ContentProvider流程
先从pms获取ContentProvider基本信息创建 ContentProvider实现类对象,然后将ContentProvider 的 Binder 接口对象封装到 ProcessRecord.pubProviders供应客户端aidl调用。
2025-03-29 16:58:09
1423
原创 Android 系统Service流程
1.应用bindService时 会先创建一个LoadedApk.ServiceDispatcher对象和一个LoadedApk.ServiceDispatcher.InnerConnection(继承IServiceConnection.Stub) 是aidl 服务端实现类对象mIServiceConnection,
2025-02-14 17:12:04
1234
原创 adb shell 查询Android应用cpu内存占用及优化
在Android系统性能分析时,经常会拿到系统历史cpu和内存占用日志,来分析某段时间哪些应用cpu和内存占用是否特别高以及变化来确定应用内存或cpu是否需要优化。
2025-01-07 13:56:33
7369
原创 AMS初始化、应用启动及activity启动流程分析(Android 11)
源码查看路径:http://xrefandroid.com/android-11.0.0_r48/涉及到源码文件:由Android系统启动流程可知SystemServer进程启动时,会调用SystemServer.startBootstrapServices 启动系统Boot级别服务,该方法会启动ams,调用流程如下:1.创建ActivityTaskManagerService并启动。
2024-11-13 19:26:36
1613
原创 Android系统广播流程
主要用到的源码文件提供应用注册广播入口,和ams通信。分发广播信息给为应用注册的广播,其内部的aidl实现类InnerReceiver接收Android系统中广播,注册一个广播会创建一个InnerReceiver对象。初始化3种广播队列,处理注册广播流程缓存注册的广播对象binder等信息,处理发送广播流程处理广播分发流程,和广播超时策略。mParallelBroadcasts存储无序广播列表。
2024-10-31 17:02:08
770
原创 HashMap,SparseArray和ArrayMap 使用场景
优点:SparseArray在存储和读取数据时候,使用的是二分查找法,在获取数据的时候非常快,比HashMap快的多,因为HashMap获取数据是通过遍历Entry[]数组来得到对应的元素。因为它避免了自动装箱的过程,如果key为long类型,它还提供了一个LongSparseArray来确保key为long类型时的使用,一、SparseArray 内部使用两个数组mKeys和mValues来进行数据存储,一个存储key,另外一个存储value。1.2、如果key类型为其它的类型,则使用ArrayMap。
2024-09-19 17:02:13
535
原创 Android系统启动流程简介
ActivityManagerService通过Binder机制与ActivityManager进行通信,提供对系统中其它组件的管理和监控功能.从上面可知SystemServer.startBootstrapServices 启动系统Boot级别服务 会启动ams,调用如下:SystemServiceManager.startService(@NonNull final SystemService service) 方法。
2024-08-13 19:14:05
1317
原创 Android Gradle插件(AGP)版本与Gradle版本及jdk版本对应关系
gradle 插件版本 4.2.2对应gradle 发行版本以及支持的 kotlin版本 如下:项目 build.gradle文件中:gradle-wrapper.properties 文件中:官方匹配关系如下链接:
2024-08-09 10:57:59
3952
原创 不销毁activity实现白天黑夜主题切换
一.onCreate初始化AppCompatActivity.onCreate 先调用getDelegate() 创建 AppCompatDelegateImplN(最终继承AppCompatDelegateImplV9->AppCompatDelegateImplBase)对象 delegate,然后调用 delegate.installViewFactory()AppCompatDelegateImplV9 实现接口LayoutInflater.Factory2。
2024-08-02 17:00:34
983
原创 Android应用与SurfaceFlinger建立连接及界面显示过程
Android应用与SurfaceFlinger建立连接及通信的过程主要用到的文件。
2024-07-19 17:23:02
1153
原创 Android中毛玻璃效果的两种实现Android12及以前版本
方法1 先将图片缩小,然后放大图片,再设置为控件背景以达到更模糊的效果,同时也提升模糊算法的处理效率。对比下来同样的模糊半径 ,方法1 的模糊效果更好,且方法1 的模糊半径可以设置范围更大。2.使用Android自带类RenderScript 实现。Android中毛玻璃效果主要有两种实现方式。3.FastBlurUtil.java 类。1.使用JAVA算法FastBlur实现。2.BitmapUtil.java 类。方法2 模糊半径只能设置1-25。1.activity中调用。
2024-05-07 17:34:19
3288
原创 高通 camera hal 流程
以高通 msm8998 平台为例介绍高通 camera hal。库文件名称:camera.msm8998.so源码目录:/hardware/qcom/camera/msm8998/QCamera2主要文件:QCamera2Hal.cpp 定义了 HAL_MODULE_INFO_SYMQCamera2Hal.cpp 中定义的 HAL_MODULE_INFO_SYM 初始化 camera_module_t 对象,
2024-05-06 19:15:28
4012
原创 Android activity主题设置
注意 如果AndroidManifest 默认陪着一个主题,然后onCreate代码中动态切换主题,主题背景色切换 会有一个闪的过程。方法1 AndroidManifest 设置theme。方法2 Activity 中设置theme。
2024-03-20 10:54:39
734
原创 Android mvvm使用流程
ViewModelProvider初始化时如果不传递 ViewModelProvider.Factory,则ViewModelProvider内部会使用默认的 Factory,getTestLiveData 返回LiveData提供 数据给ViewModel,ViewModel 及view层获取到LiveData即监听数据的变化。ViewModel 类提供了一种保存和管理界面相关数据的机制,并确保这些数据在配置更改(如设备旋转)时不会丢失或重新创建。3.创建view类UiTestActivity。
2024-02-26 13:06:23
1076
原创 Android aidl流程
com.android.demo.aidl.IIpcService asInterface 方法 返回new com.android.demo.aidl.IIpcService.Stub.Proxy(obj),即返回IIpcService.Stub.Proxy实例。创建 IIpcService.aidl和IIpcServiceListener.aidl,具体源码和aidl工具生成的IIpcService.java和IIpcServiceListener.java。
2024-02-06 14:59:39
1610
原创 Android aidl 工具使用
o和-h参数分别指定.cpp文件和.h文件输出的路径。PS:如果设置参数ndk,生成的文件可以不依赖Android源码。1.aidl 工具在sdk中路径:~/Android/Sdk/build-tools/33.0.0-rc2/2.IIpcServiceListener.aidl文件。C++接口文件比较多,一个aidl文件生成4个文件。3.-I DIR, --include=DIR import搜索路径,指定依赖的aidl文件所在目录。查看生成的头文件和cpp文件 1。查看生成的java文件1。
2024-02-06 09:42:02
1332
原创 android camera client、CameraService及camera hal调用流程
这里的 hardware::camera::provider::V2_4::ICameraProvider 对应 android.hardware.camera.provider@2.4 .so模块,CameraProvider就是与HAL层so的交互。因为 Camera 也继承 ::android::hardware::BnCameraClient 所以可以将 Camera 赋值给 TCamCallbacks(即 TCam为::android::hardware::ICameraClient)
2024-02-02 14:10:17
4473
3
原创 Android中的智能指针流程
智能指针是C++中的一个概念,通过基于引用计数的方法,解决对象的自动释放的问题。5.2 从如下模板类 sp定义可知,创建sp时会调用sp::sp,然后调用other->incStrong,即 weakref_impl 的 incStrong ,最终调用。3.2从如下模板类 wp定义可知,创建wp 时会调用wp::wp,然后调用other->createWeak,即weakref_impl的 createWeak,最终调用。要想访问弱指针所指向的对象,
2024-01-25 16:14:35
1180
原创 c++类和java类使用的差异
7.c++ const int顺序可颠倒,int const也可以。6.c++ 类 继承使用: public 父类,其中public 是用来修饰每个基类。4.c++ 类初始化对象my方式 和java不同。在java类中全局镜头变量,可以声明final, 也可以不声明。5.c++ 类 中静态变量访问 符号不同,c++使用::,JAVA使用.2.c++ 的函数声明在类内部,c++ 的函数定义在类的外部;----------java类代码示例。----------c++类代码示例。3.c++ 类定义结束;
2024-01-22 15:02:48
578
原创 Ubuntu和windows连接串口设备方法
查看 设备管理器查看串口连接的事哪个端口, 在putty端口下拉栏,选择串口设备用的端口例如:COM4。speed输入115200,connection type选择Serial,点击open即可。2.串口板连接主机和电脑后执行命令进入串口界面。2.打开PUTTY工具,进入对应界面,如图所示。Ubuntu和windows连接串口设备方法。1.下载并安装 minicom工具。1.下载并安装putty工具。二、windows连接串口。一、Ubuntu连接串口。
2024-01-18 16:05:36
1973
原创 kotlin 调用对应java实现
public final class LoginResult { 对应变量 get set方法等}2.2 open class kotlin调用 ,open表示可继承。kotlin 调用对应java实现。--------- java实现。----------java实现。----------java实现。----------java实现。----------java实现。----------java实现。----------java实现。----------java实现。----------java实现。
2024-01-18 13:12:39
790
原创 shell 常见命令
====模拟点击返回键 keyevent 4,home键3。====apksigner命令查看查看apk文件是v几签名。====命令查询 v1 和v2签名apk的签名详情信息。====== adb 查询Android系统版本。主体公共密钥算法: 2048 位 RSA 密钥。签名算法名称: SHA256withRSA。====根据包名称获取 apk 路径。=====强制设置存储空间低。====清除对应包的数据和缓存。=====添加log缓冲区大小。====依据包名查询签名信息。====依据包名查询版本号。
2024-01-18 10:29:40
603
原创 launcher 点击和滑动屏幕过程分析
若onInterceptTouchEvent方法 return true,则会进入 onTouchEvent事件中,onInterceptTouchEvent只会执行一次本次ACTION_MOVE而onTouchEvent会执行多次包括上面的ACTION_DOWN,ACTION_MOVE,ACTION_UP的事件;------------------------------------------------------滑动一次log-----------------------------
2024-01-18 10:26:15
487
原创 android onInterceptTouchEvent和onTouchEvent的执行关系
------onInterceptTouchEvent不拦截 part1---------onTouchEvent不接收。-------onInterceptTouchEvent不拦截 part1---------onTouchEvent不接收。-------onInterceptTouchEvent不拦截 part2---------onTouchEvent接收。-------onInterceptTouchEvent不拦截 part2--------onTouchEvent接收。
2024-01-18 10:25:26
463
原创 launcher 壁纸相关
开启壁纸选择器,所有<intent-filter> <action android:name="android.intent.action.SET_WALLPAPER" /> 所有action为android.intent.action.SET_WALLPAPER的应用都会进入壁纸选择列表,默认壁纸读取的是frameworks/base/core/res/res/drawable-相关dpi/default_wallpaper.jpg。文件记录的壁纸的宽度高度等信息。2.壁纸如何随着屏幕切换移动?
2024-01-18 10:24:27
450
Android camera用到的aidl文件和aidl编译出来.h 和cpp文件
2024-03-12
aidl demo用到的源码和生成java和cpp
2024-02-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅