这是作者在2017年处理的一个多线程并发的案例,带着大家一起来领略异常分析思路 一. 问题描述 问题表现是文件管理器(fileexplorer)应用出现java.lang.NullPointerException导致应用…
标签:Gityuan
NotificationManagerService原理分析
基于Android 7.0源码分析通知机制,相关源码如下: frameworks/base/services/core/java/com/android/server/notification/ - Notificati…
介绍addr2line调试命令
用addr2line可以将函数地址解析为函数名,在抓取调堆栈时Java层的堆栈本身就是显示函数名与行数,这个不需要转换,但对于native和kernel层的则是函数地址,需要借助addr2line来进行转换。 接下来分析…
介绍gdb调试工具
本文介绍Native异常的调试工具gdb的环境准备与常见命令 1. 找到gdbserver 当有Android系统源码,可在/prebuilts目录下查找,一般位于如下: 工具 所在源码路径 32位gdb服务端 preb…
Linux进程pid分配法
一. 概述 Android系统创建进程,最终的实现还是调用linux fork方法,对于linux系统每个进程都有唯一的 进程ID(值大于0),也有pid上限,默认为32768。 pid可重复利用,当进程被杀后会回收该p…
/proc/stat解析
本文解析进程节点含义 一. 概述 1.1 CPU时间 cpu指标 含义 user 用户态时间 nice 用户态时间(低优先级,nice>0) system 内核态时间 idle 空闲时间 iowait I/O等待时…
Linux进程管理(二)--fork
基于Kernel 4.4源码 kernel/include/linux/sched.h kernel/include/linux/kthread.h kernel/arch/arm/include/asm/thread_…
Linux进程管理(一)
一. 概述 Linux是类Unix系统,借鉴了Unix的设计并实现相关接口,但并非Unix。Linux是由Linus Torvalds于1991年创造的开源免费系统,采用GNU GPL协议保护,下面列举Linux的一些主…
AMS之dumpsys篇
基于Android 7.0的源码分析 一.概述 前面介绍过AMS相关的一些数据结构,每个数据结构有大量的成员变量,为了查询当前手机运行时状态的 变化值,可以通过dumpsys activity命令来完成,该方法最终是调用…
Android打印Trace堆栈
本文介绍一些Android常见的调试技巧 一. 获取Trace 调用栈信息(Trace)是分析异常经常使用的,这里简单划分两类情况: 当前线程Trace: 当前执行流所在线程的调用栈信息; 目标进程Trace:可获取目标…
AMS总结(一)
从另一个维度,简要总结下四大组件的超时统计区间,以及Handler情况。 一. 组件超时统计 1.1 Service 序号 App端方法 生命周期 计时起点 计时终点 1 AT.handleCreateService o…
全面剖析SharedPreferences
一. 概述 SharedPreferences(简称SP)是Android中很常用的数据存储方式,SP采用key-value(键值对)形式, 主要用于轻量级的数据存储, 尤其适合保存应用的配置参数, 但不建议使用SP 来…