- 博客(119)
- 资源 (5)
- 收藏
- 关注

原创 优快云博客列表
文章目录Stability(稳定性)performance(性能)Boot up && shutdown(开关机)Debug相关SystemUIAMSWMSAndroid build(编译)BinderInputSensorStability(稳定性)Android Watchdog机制介绍与分析Native Crash基本分析ANR基本分析Android...
2020-03-05 11:16:33
335
原创 Android Low Storage机制(DeviceStorageMonitorService)
文章目录1.low storage简介(DeviceStorageMonitorService)2. DeviceStorageMonitorService代码介绍2.1 服务初始化2.2 DeviceStorageMonitorInternal提供的接口2.3 check() /data分区3 监听lowStorage广播1.low storage简介(DeviceStorageMonitorService)Device storage monitor module is composed of de
2022-04-28 15:46:59
2369
原创 Android EventLog打印位置
Java打印 第一种notification_visibility转为writeNoticationVisibility编译时候会解析生成文件EventLogTags.java,然后代码再去调用以实现添加EventLog可以在out目录下执行命令 find -name EventLogTags.java来找对应目录生成的EventLogTags.java@/frameworks/base/services/core/java/com/android/server/EventLogTags.log
2022-04-27 11:41:00
916
原创 AndroidR Logd原理
文章目录0. 相关文件目录1. ALOGD写log流程1.1 ALOGD打印log,传入可变参数1.2 logdw socket写log1.3 pmsg写入 /dev/pmsg02. logcat读取流程2.1 logcat调用liblog流程2.2 logformat_ 申请和释放2.3 logger_list申请和释放2.4 android_logger_open打开设备log2.5 android_logger_list_read获取buffer2.6 android_log_printLogLine
2022-02-07 16:23:00
3159
原创 Android Input Log
打开LOG开关#inputFlinger负责事件读取分发frameworks\native\services\inputflinger\InputDispatcher.cppframeworks/native/services/inputflinger/InputReader.cppframeworks/native/services/inputflinger/Eventhub.cpp### input库frameworks\native\libs\input\InputTransport.c
2021-01-29 15:23:28
2700
原创 Android Q及之后 lmkd原理
在Android O时,lmkd只是起中转作用1.ams的函数updateOomLevels通过socket把minfree和adj数据通过socket写向lmkd.lmkd判断是kernel的lowmemorykiller时,就把数据写向节点/sys/module/lowmemorykiller/parameters/adj和/sys/module/lowmemorykiller/parameters/minfree2.ams setOomAdj设置当前进程adj值(/proc/pid/adj),s
2021-01-12 15:43:23
1239
1
原创 Android O lowmemorykiller原理解析
文章目录1. LowmemoryKiller介绍1.1 为什么引入LowmemoryKiller?1.2 LMK基本原理?1.3 lmkd整体流程1.4. 查看进程adj值已经进程对应的类型2. AMS怎么调整adj和内存值minFree2.1 AMS设置minfree2.2 什么时候ams会设置lmkd的阈值3. AMS设置当前进程adj值(/proc/pid/adj)4. lmkd接收消息原理5. lmkd kernel监测系统内存1. LowmemoryKiller介绍1.1 为什么引入Lowme
2021-01-12 15:42:53
1208
原创 Android Input和SendEvent脚本命令模拟连续滑动事件
文章目录1. Input命令滑动事件1.1 input命令使用1.2 input命令源码解析2. SendEvent滑动事件3. shell脚本连续发送滑动事件4. python脚本连续发送滑动事件5. push shell到机器里6. 问题6.1. sendEvent命令滑动卡顿6.2. sendevent耗时太久6.3. Input缺点1. Input命令滑动事件1.1 input命令使用input --help查询使用130|msm8996_gvmq:/ # input --helpErro
2020-12-22 17:37:00
7546
11
原创 Android 时间同步服务NetworkTimeUpdateService
文章目录NTP介绍NtpTrustedTime获取时间SntpClient具体请求时间NetworkTimeUpdateService启动和时间更新NetworkTimeUpdateService启动1. 定时更新2. AUTO_TIME变化发送Message2. 网络变化更新时间SystemClock.setCurrentTimeMillis设置时间NTP介绍NTP:网络时间协议,英文名称:Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器
2020-11-11 16:35:26
2577
原创 Android Watchdog介绍和实例分析
文章目录1. Watchdog是什么?2. Watchdog代码基本介绍3. 原因分析4. 实例分析例1:SystemServer Binder耗尽例2:IO阻塞例3:Thread.sleep阻塞1. Watchdog是什么?Android Watchdog主要是检测system server重要线程状态(main,android io,android display ,Activitymanager,android fg,android bg等线程 )的一种机制。发生Watchdog时会触发Andro
2020-08-17 16:57:20
2716
原创 ANR实例
文章目录什么是ANR?常见的原因1. 主线程耗时Blocked2. Binder耗时Blocked3. 被子线程同步锁block4. Binder线程耗尽什么是ANR?以下四个条件都可以造成ANR发生:InputDispatching Timeout:5秒内无法响应屏幕触摸事件或键盘输入事件BroadcastQueue Timeout :在执行前台广播(BroadcastReceiver)的onReceive()函数时10秒没有处理完成,后台为60秒。Service Timeout :前台服务20
2020-08-17 16:56:32
1192
原创 ANR trace详解
文章目录1. Trace pattern2. 解释3. 关键词对照1. Trace pattern1."Signal Catcher" daemon prio=5 tid=3 Runnable2. | group="system" sCount=0 dsCount=0 obj=0x32c050d0 self=0x7f97dd14003. | sysTid=9729 nice=0 cgrp=default sched=0/0 handle=0x7fa200e4504. | state=R sc
2020-08-17 16:55:58
5743
原创 Android 重启类型
文章目录1. system_server 重启2. NETD重启3. surfaceFlinger重启4. zygote 重启5. init 重启1. system_server 重启systemserver重启原理是因为zygote进程,监视所有子进程,systemserver died就会触发,zygote kill self@frameworks/base/core/jni/com_android_internal_os_Zygote.cpp//pid=-1 等待任何子进程,此时的waitp
2020-08-17 16:55:20
997
原创 Bugreport原理
文章目录1. bugreport2. bugreportz3. adb bugreport4. dumpstate1. bugreport2. bugreportz3. adb bugreport4. dumpstate1. bugreport编译到/system/bin/bugreport@frameworks/native/cmds/bugreport/Android.bpcc_binary { name: "bugreport", srcs: ["bugreport.cpp"]
2020-08-17 16:52:45
2959
原创 Android编译 Makefile入门学习
文章目录1 Makefile的基本规则2. make执行步骤3. 变量赋值4. make clean和伪目标文件5. Makefile 里有什么?6. 引用其他Makefile文件7. 伪目标8. 多目标$@9. 显示命令@10. 命令执行11. 命令出错 -12. 自动化变量 $@ @< $$@13. 字符串函数13.1 subst 字符串替换函数13.2 patsubst 模式字符串替换...
2020-03-05 11:13:10
804
原创 Android Studio Profiler使用之查看Trace
1. Android Profiler介绍Traceview 已弃用。如果您使用的是 Android Studio 3.2 或更高版本,则应改为使用CPU Profiler来执行以下操作:检查通过使用Debug类对应用进行插桩检测而捕获的.trace文件、记录新方法跟踪信息、保存.trace文件以及检查应用进程的实时 CPU 使用情况。cpu profile是Android...
2020-03-03 17:08:27
8155
原创 Android Systrace(3) -- 掉帧卡顿
1. 丢帧看Surface Flinger trace发现他的ui thread并不是每一个vsync都有绘制,有发生丢帧,原因是launcher数据是空的2. 查看lancher的trace,发现连续滑动时,每一帧都是成功绘制成功了,但是uiThread并不是都在doFrame,有些帧并没有做doFrame,原因是没有输入事件,可以看deliverInputEvent那些地...
2020-03-03 17:03:44
6730
原创 Android Systrace(2) -- 应用启动时间
1.1 应用启动我们平时在写应用的时候,一般会指定一个 mainActivity ,用户在桌面上点击这个 Activity 的时候,系统会直接起这个 Activity. 我们知道 Activity 在启动的时候会走 onCreate/onStart/onResume .这几个回调函数.许多书里讲过,当执行完 onResume 函数之后,应用就显示出来了…其实这是一种不准确的说法...
2020-03-03 16:57:29
1250
原创 Android Systrace(1) -- 介绍和抓取
1. 介绍systrace一般来说,我们的机器以60帧/秒显示时(也就是16.6 millisecond),用户会感觉机器会流畅。如果出现显示时出现丢帧的情况,我们要知道系统在做什么。systrace是Android4.1版本之后推出的,对系统Performance分析的工具。systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各...
2020-03-03 16:33:29
5930
原创 Android Bugreport 内容解释
文章目录1. 抓取Bugreport方法2. MEMINFO内存相关2.1 dumpsys MEMINFO2.2 cat MEMINFO2.3 dumpsys PROCRANK2.4 showmap总结3. CPUINFO3.1 dumpsys cpuinfo3.2 top4. PROCESSES AND THREADS (进程和线程)5. PRINTENV环境变量6. Android Log(...
2019-12-27 13:36:19
6563
2
原创 Android StateMachine使用
文章目录1. StateMachineJar的封装2. 使用示例3. 使用注意1. StateMachineJar的封装把源码的如下3个文件,提取为jar包使用就可以frameworks/base/core/java/com/android/internal/util/StateMachine.javaframeworks/base/core/java/com/android/intern...
2019-12-24 18:04:02
952
原创 Android O Jack预编译静态jar编译报错解决
文章目录1. 错误Pattern2. 错误原理3. 修改方法4.源码没有报错原理1. 错误Pattern编译错误原因:/bin/bash -c "(mkdir -p out/target/common/obj/JAVA_LIBRARIES/TSWheelService_intermediates/classes.jack.tmpjill.res ) && (unzip -...
2019-12-24 18:03:26
1476
原创 SettingsProvider监听值变化(ContentObserver)
文章目录1. registerContentObserver注册要监听的变量2. 自定义变量监听3. 原理4. Settings.java添加新变量方法5. SettingsProvider知识点1. registerContentObserver注册要监听的变量public class MainActivity extends Activity { public static fin...
2019-12-13 14:40:29
3959
原创 golang 常用代码
文章目录1. 字符串常见方法1.1 字符串三种比较方法1.2 字符串替换1.3 字符串截取1.4 字符串包含1.5 串联1.6 按空格返回切片数组1.7 去除两端字符2. 函数2.1 函数定义和调用1. 字符串常见方法1.1 字符串三种比较方法fmt.Println("go"=="go")fmt.Println("GO"=="go")fmt.Println(strings.Compar...
2019-12-10 15:39:57
316
原创 预制包含很多lib库的apk
文章目录1. Androidmk写法2. 编译结果3. LOCAL_PREBUILT_JNI_LIBS原理1. Androidmk写法预编译时使用LOCAL_PREBUILT_JNI_LIBS,来制定库的路径LOCAL_PATH := $(call my-dir)define get-all-libraries-module-name-in-subdirs$(sort $(shell...
2019-12-10 15:36:47
4445
1
原创 Android 编译之source和lunch
文章目录1. source build/envsetup.sh原理2.lunch原理3. lunch之后的不同产品的编译4.添加一个新lunch编译选项3.其他一些点1. source build/envsetup.sh原理会发现build/core和build/make/core文件是一样的,这是是从build/make/core链接过去的,因此修改build/make/core就好ubu...
2019-12-10 15:33:53
4522
1
原创 Android ArrayBlockingQueue使用
1. ArrayBlockingQueue使用示例阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。...
2019-12-10 14:56:26
1974
原创 Android Sensor (2) -- Sensor 架构及app的回调方式
1.1 Sensor架构1.1.1.数据传递方式App -->I2C过程: app通过SensorManager,getSystemServer调用到SystemSensorManager SystemSensorManager通过jni调用到SensorManager.cpp ,通过binder createconnection调用到SensorServiceSen...
2019-09-27 13:49:31
440
原创 android PowerManagerService介绍
https://blog.youkuaiyun.com/TaylorPotter/article/details/83824647
2019-09-17 16:48:03
818
原创 Android Sensor (5) --SensorService和SensorManager回调原理
目录1.1 FD共享流程1.2 SensorService读取数据并且发送SensorEvent1.3 客户端Looper收到event读取,分发给app1.4 BitTube原理SensorEvent从SensorService到SensorManager跨进程原理bitTube1.1 FD共享流程app注册listener时会初始化BaseEven...
2019-09-16 11:26:29
1654
原创 Android Sensor (4) -- SystemSensorManageer和SensorService连接
@SystemSensorManager.javapublic class SystemSensorManager extends SensorManager { @Override protected boolean registerListenerImpl(SensorEventListener listener, Sensor sensor, ...
2019-09-16 11:16:58
474
原创 Android Sensor (3) -- 服务端SensorService启动
目录1.1 SysterServer启动sensorservice1.2 android_servers.so 启动sersorservice1.3 SensorService instantiate1.4 SensorService:: onFirstRef1.1 SysterServer启动sensorservicesensorservice通过Sys...
2019-09-16 11:14:39
1556
原创 Android Sensor (2) -- Sensor 架构及app的回调方式
1.1 Sensor架构1.1.1.数据传递方式App -->I2C过程: app通过SensorManager,getSystemServer调用到SystemSensorManager SystemSensorManager通过jni调用到SensorManager.cpp ,通过binder createconnection调用到SensorServiceSensor...
2019-09-16 11:06:41
976
原创 Android Sensor (1) -- Sensor服务获取
目录1.1 app调用sensor1.4 createService and CachedServiceFetcher1.5 SystemSensorManager init1.6 app getDefaultSensor1.7 app registerListener1.8 SensorEventListener 数据回调 onSensorChanged...
2019-09-16 10:58:11
1204
原创 Android Input (8) -- ANR input event原理
Link:Android Input (1) -- InputManagerService启动Android Input (2) -- inputReaderAndroid Input (3) -- inputDispatcherAndroid Input (4) -- inputDispatcher到ViewRootImplAndroid Input (5) -- ViewR...
2019-09-12 14:49:10
2539
原创 Android Input (7) -- 模块的锁检测
Link:Android Input (1) -- InputManagerService启动Android Input (2) -- inputReaderAndroid Input (3) -- inputDispatcherAndroid Input (4) -- inputDispatcher到ViewRootImplAndroid Input (5) -- ViewR...
2019-09-12 14:11:12
431
原创 Android Input (6) -- PhoneWindowManager中Power,BACK等按键处理流程
Link:Android Input (1) -- InputManagerService启动Android Input (2) -- inputReaderAndroid Input (3) -- inputDispatcherAndroid Input (4) -- inputDispatcher到ViewRootImplAndroid Input (5) -- ViewR...
2019-09-12 14:06:18
2550
原创 Android Input (5) -- ViewRootImpl 的事件分发(Activity ViewGroup View )
Link:Android Input (1) -- InputManagerService启动Android Input (2) -- inputReaderAndroid Input (3) -- inputDispatcherAndroid Input (4) -- inputDispatcher到ViewRootImplAndroid Input (5) -- ViewR...
2019-09-12 14:03:16
2869
生成andridStudio签名
2018-06-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人