- 博客(35)
- 收藏
- 关注

原创 ActivityManagerService解读之Activity启动闲聊--以TaskSnapshot为点切入AndroidView绘制原理分析
ActivityManagerService解读之进程管理开始,我们大大小小已经有11篇文章专门分析了Android系统服务ActivityManagerService,总结一句话ActivityManagerService在Android系统中主要负责对应用进程和Android四大组件进行管理。本篇将以TaskSnapshot为点切入Android View界面绘制相关的指点并对其进行详细解读分...
2019-03-27 21:21:52
5021
2

原创 ActivityManagerService解读之Activity启动时间闲聊--优雅的优化我们应用的启动时间
ActivityManagerService解读之Activity启动时间闲聊--Android Framework层时间计算介绍一文从Android Framework角度杂谈了一波应用启动时系统各种时间计算的整个过程。想要获取我们开发的应用启动的详细时间,直接使用Android系统提供的“adb shell am start -W -S”命令,如下所示,这个命名会很优雅的输出你的应用启动过程的...
2018-12-22 19:56:28
2593
原创 Binder基石-Parcel
简述Binder是Android进程间通信的基础,相信小伙伴们都曾学习了解过Binder,不知道小伙们有没有产生过这样的疑问:Java层,BinderProxy是何时创建的?自定义AIDL接口传递Binder实体的时候,Server端明明传的是Binder实体对象,Client端怎么就生成了一个Proxy对象?Binder IPC时我们设置的参数数据是如何传递的?想要回答这些问题,我们必须先要深入了解Android特有的数据序列化反序列化机制Parcel。正如如标题,parcel是Binder在Andr
2020-06-19 13:41:49
1588
1
原创 Android补间动画原理介绍
一 简述补间动画是Android诞生便支持的动画,也是App开发中最常用的动画,目前Android支持四种补间动画:位移(TranslateAnimation),旋转(RotateAnimation),缩放(ScaleAnimation)和透明(AlphaAnimation)。补间动画主要作用对象是Android的View。核心类的关系如下图所示:Animation是一个抽象类,...
2019-10-16 17:50:12
1384
原创 Android Animation API介绍----简单分析ViewAnimation的执行原理
Android用于描述动画的抽象基类,Android本身提供的动画和我们自定义的动画一般都继承Animation.Interpolator & Animation.AnimationListenerInterpolator:用来描述动画运行的过程Animation.AnimationListener:动画执行过程的回调,目前提供了onAnimationStart,onAnima...
2019-08-23 17:09:25
692
原创 ActivityManagerService解读之Activity启动闲聊--Activity启动窗口和TaskSnapshot
什么是Activity的启动窗口?为什么存在这样的一个窗口?什么是TaskSnapshot?啥也不说了,直接带着这些个问题开始本篇的闲聊。什么是Activity的启动窗口,为什么存在这样的一个窗口?我们先来一个动图直观的了解一下。首先我们点击启动我们的测试demo,看见蓝色的界面没有,那就是Activity的启动窗口。Android在Activity启动的时候,当应用界面还未显示出来...
2019-03-19 19:49:56
3674
1
原创 ActivityManagerService解读之Activity启动时间闲聊--Android Framework层时间计算介绍
从ActivityManagerService解读之Activity启动初探,到ActivityManagerService解读之Activity启动再探,到ActivityManagerService解读之Activity启动再探-细节补充ActivityStarter中方法属性介绍,再到ActivityManagerService解读之Activity启动三探--Activity中Task与S...
2018-12-19 14:19:36
2567
1
原创 ActivityManagerService解读之Activity启动三探--Activity中Task与Stack
简介ActivityManagerService中对Activity的管理都是以Task的形式,任务Task是指在执行特定作业时与用户交互的一系列 Activity, 这些 Activity 按照各自的打开顺序排列在堆栈Stack中,AMS中分别以TaskRecord和ActivityStack表示,Activity则用ActivityRecord表示。因此我们也可以这么认为ActivityM...
2018-12-11 15:43:06
2149
原创 ActivityManagerService解读之Activity启动再探-细节补充ActivityStarter中方法属性介绍
ActivityManagerService解读之Activity启动再探介绍了当我们使用不同的启动模式启动,或在AndroidManifest文件中为Activity配置了不同的属性,又或在启动时Intent中添加了各种flag,其中关于启动模式的选择和Intent flag的处理都进本在ActivityStarter类中完成,其中的一些代码细节和处理方法,在前文中并未详细介绍,本文将补充对Ac...
2018-11-24 17:02:39
1747
原创 ActivityManagerService解读之Activity启动再探
ActivityManagerService解读之Activity启动初探一文以启动Log为切入点重点偏于流程分析,概要的介绍了AndroidActivity启动。本文将将从Activity启动模式选则,设置不同Intent Flag以及Activity在AndroidManifest文件中不同的设置对Activity Task影响为点,来再次分析Activity启动。本文将更多的涉及Androi...
2018-11-23 18:46:14
957
原创 常见排序算法Java实现
目前最经典的排序算法要属:冒泡排序,快速排序,简单插入排序,希尔排序,简单选择排序,堆排序,二路归并排序,多路鬼并排序,计数排序,桶排序,基数排序。以下就是这些常见算法的Java实现,有兴趣的可以自行实现。现在我们就来一个个分析介绍一下各自的基础思想和实现。讲解这些算法目的在于后续更好的分析理解Android和Java。因此我们必须掌握这些基础算发思想。import java.util...
2018-10-10 17:45:21
234
原创 Android消息机制-Looper MessageQueue Handler
Android有两种特别重要的通信机制,一是Binder IPC,二是消息机制,前者用于进程间通信,后者用于进程内线程间通信。本篇将介绍Android中的消息机制。在介绍Android消息机制之前,先提几个问题,如果您能很好的答出这几个问题,建议您关闭本文章,因为您已经很好的掌握了消息机制的原理了。问题一”Handler,Looper和MessageQueue三者之间对应的关系?“问题二”Loop...
2018-10-08 15:52:05
463
原创 聊聊Android中的Context-初步分析Android中Context的实现
说到Context,大家一定非常熟悉,Android中的很多操作都和Context有关,比如打开activity、发送广播、打开本包下文件夹和数据库、获取classLoader、获取资源等等。那么这个Context究竟是何方神圣,我们不得而知,仅仅止步于如何使用Context,本篇将和大家一起聊聊Android中的Context。Context架构设计Android Context的设...
2018-10-08 15:27:49
416
原创 Android P Basic lifecycle transaction containers改动--设计模式体现之策略模式
整理Activity启动流程时发现,Android P代码在android/app作了很大的改动。如果您对Activity启动还未了解,建议您看这篇文章。针对这次改动,Google官方给出的解释如下:This adds basic containers for holding some messages to a client,that are related to activity li...
2018-09-28 22:17:13
472
原创 ActivityManagerService解读之Activity启动初探
Activity是Android四大组建之一,负责用户交互界面展示,其重要性不可言喻。Android系统由ActivityManagerService负责管理Activity。熟悉Activity的启动,将对我们学习了解ActivityManagerService大有裨益。本文基于AndroidP将以首次点击桌面应用图标的方式为线,分析Activity的启动,包括分析应用进程启动。文中将涉及不少应...
2018-09-28 14:42:17
7979
原创 Linux中关键名字解释-linuxnote00(持续补充)
简称 英文解释 中文解释 作用 IPC Inter-Process Communication 进程间通信 SMP Symmetrical Multi-Processing 对称多处理器 UMA Uniform Memory Access 统一内存架构 UMA模型是指物理内存是连续的,SMP系统中的每个处理...
2018-09-19 15:31:10
264
原创 Linux内存管理-linuxnote03
linuxnote01和linuxnote02中学习了Linux中进程线程的描述,并学习了Linux中如何进行进程管理,学习理解的过程中,我们有收获也有疑惑,比如什么是进程的地址空间这个地址空间存在哪儿,什么是内核栈,页表是什么?等等的问题,其中一些问题都是与Linux中内存管理相关,因此linuxnote03开始学习Linux内存管理相关的知识。本篇及后续所有的Linux学习都基于”LINUX内...
2018-09-19 15:14:45
305
原创 Linux进程调度-linuxnote02
linuxnote01中学习了Linux中的进程,本篇将要学习系统中调度程序是如何对进程进行调度。在多任务系统中可分为非抢占式多任务(coorperative)和抢占式多任务(preemptive),Linux采用的则是后者,这就意味着进程对CPU的占用时间是由操作系统决定的,具体的说则是由操作系统中的进程调度程序所决定的。对CPU访问的裁决过程被称为调度(scheduling)。(本篇及后续所有...
2018-09-12 15:27:35
376
原创 Linux进程管理-linuxnote01
进程管理是所有操作系统的心脏所在,Linux也不例外。(本篇及后续所有的Linux学习都基于”LINUX内核修炼之道任桥伟著“和”Linux内核设计与实现“这两本书。站在巨人的肩上,我们得以往的更远。)进程和线程进程就是处于执行期间的程序(目标代码存在某种存储介质上),进程是动态的,程序是静态的。但进程不仅仅局限于一段可执行的代码,通常进程还要包含其他资源,比如打开的资源,挂起的信号,内核...
2018-09-05 15:02:00
238
原创 Java中类与类之间的关系
在Java以及其他的面向对象设计模式中,类与类之间主要存在6中关系,他们分别是:依赖,关联,聚合,组合,继承,实现,并且他们的耦合度依次增强1.Dependence依赖对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象间体现的就是依赖关系,简单的理解可以是一个类A使用到了另一个类B,在代码层面表现为,类B作为类A的某个方发的参数,或者局部变量,...
2018-08-31 14:17:04
1323
原创 ActivityManagerService解读之进程管理computeOomAdjLocked方法
上一篇文章我们介绍了updateOomAdjLocked,我们将其分为了五个部分更新前的初始化,计算进程oom,设置进程oom,主动回收一些内存,计算进程pss进行扫尾结束工作。本篇将详细介绍部分之二计算进程oom代码分析分析computeOomAdjLocked之前,我们先重温一下进程oom和Android进程分类相关的基础知识以及补充一些相关的后续分析将要用的一些信息。Android中...
2018-08-30 16:57:52
2230
原创 ActivityManagerService解读之进程管理updateOomAdjLocked方法
经过前面的ActivityManagerService解读之进程管理的介绍,我们知道AMS对进程的管理主要体现于更新LRU集合和更新进程OOM值两个方面。限于篇幅,前一篇没有对更新进程OOM的updateOomAdjLocked方法深入分析,只是介绍了原理。本篇将会详细分析updateOomAdjLocked方法。代码分析ActivityManagerService中updateOomAd...
2018-08-30 10:25:32
3374
原创 ActivityManagerService解读之进程管理(相关信息持续补充)
在介绍updateOomAdjLocked方法之前,我们先补充一些进程相关的信息,便于后续更好的理解。进程/轻量级进程状态S:Suspended 可中断的睡眠,可能是由于输出 Trace、GC 或 debug 被暂停 R:Running/Runnable 运行或就绪状态 D:Disk Sleep 不可中断的睡眠,通常是在等待 I/O,比如磁盘 I/O、网络 I/O...
2018-08-29 16:52:34
842
原创 ActivityManagerService解读之进程管理
简介ActivityManagerService(后续简称为ams)是Android系统框架层中的一个很重要的服务,负责Android四大组建的启动和管理,进程的创建和调度。接下来,咱们今天就来聊聊ams对进程的创建和调度。参考于Android P代码。进程Android系统将尽可能的长时间的保持应用进程,当Android系统内存不足的时候,为了新建进程或运行更重要的进程,最终需要移除...
2018-08-28 15:37:53
1901
原创 Android SSWD(system server Watchdog)工作原理
简介一直在想如何介绍Watchdog,思来想去还是源码比较给力“This class calls its monitor every minute. Killing this process if they don't return”简单粗暴。Android系统为了保证系统的稳定性,搞了这么个Watchdog,专门负责监控Android系统的一些核心服务和线程,并且在这些服务和线程发生异常或者...
2018-08-27 11:24:12
3106
原创 什么是二叉树?
一 什么是二叉树(参看http://media.openonline.com.cn数据结构介绍) 二叉树是树形结构的一种重要类型,在实际应用中具有十分重要的意义。从许多实际问题中抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能够简单地转换为二叉树形式,而且二叉树的存储结构及其算法都比较简单,因此我们将详细地讨论关于二叉树的存储、运算及应用。 二叉树(Binary)是n(n≥0)个结点...
2018-07-03 19:25:56
6257
1
原创 什么是拉链法?
一 介绍 拉链法又叫链地址法,Java中的HashMap在存储数据的时候就是用的拉链法来实现的,拉链发就是把具有相同散列地址的关键字(同义词)值放在同一个单链表中,称为同义词链表。有m个散列地址就有m个链表,同时用指针数组T[0..m-1]存放各个链表的头指针,凡是散列地址为i的记录都以结点方式插入到以T[i]为指针的单链表中。T中各分量的初值应为空指针(来自百度知道)。二 具体实现...
2018-07-02 20:09:04
27479
1
原创 Could not read input channel file descriptors from parce问题分析解决
最近项目Monkey测试的时候A应用总是出现如下问题,导致Crash06-30 11:43:36.160 23438 23438 E InputChannel-JNI: Error 24 dup channel fd 74.06-30 11:43:36.161 23438 23438 D AndroidRuntime: Shutting down VM06-30 11:43:36.161 23...
2018-06-05 16:54:44
7890
3
原创 Android ANR 问题第二弹------Input超时实战问题解析上
在前面的Android ANR 问题第二弹一文中,我们简诉了Android Input超时的原因,我们了解到系统Input系统分发Input的事件时如果有5s超时会触发应用ANR。在实际开发测试中,我们也会经常遇到Input超时导致的ANR问题,那么现在我们就以实际问题分析一下Input超时的ANR问题,描述一下实际开发测试中我们应该如何定位问题的原因。本文基于AndroidO(8.1)系统。实战...
2018-05-30 21:58:28
80930
5
原创 Android ANR 问题第二弹------Input事件是如何超时导致ANR的
在Android ANR 问题第一弹中,我们介绍Android ANR问题分为三类:Input,Receiver,Service。我们现在就先来详细的介绍Input事件超时是如何导致ANR问题发生的,我们只有从原理上去了解Input超时的本质,才能更好的分析解决实际开发中遇到的问题。本文会以Android8.1的代码为准,来简要分析Input事件超时。在分析Input超时之前,我们先来简单的介...
2018-05-26 17:08:25
22067
原创 Android ANR 问题第一弹
日常开发测试中,我们经常会遇到各种应用的ANR问题,什么是ANR?application not respond,说的就是你的应用无响应了,卡了废话不多说,直接上干货一:Android ANR 分三类Input dispatch(系统的key,屏幕点击事件)处理超时 ANR timeout 5000msBroadcastReceiver 分发+处理超时ANR(广播超时一般指的都是有序广播即orde...
2018-05-25 17:47:37
2337
原创 Android Native Crash崩溃及错误原因分析二-实战解决
一.简述之前有一篇文章讲诉了Android实际开发过程中一些崩溃的原因,以及对崩溃类型做了详细的介绍,简单回顾一下:Crash类型:Java和Native,JavaCrash中明显会打印出AndroidRuntime的log,而NativeCrash则Logcat会在“debug”tag下输出dump信息,开发过程中javacrash较好分析,NativeCrash则相对较难,二.
2017-07-28 18:51:39
28372
原创 Android7.0背光调节
涉及类: 一.简述Android屏幕背光属于Android系统中display模块,display是从Power中分出来的,所以和Power有着密不可分的关系。背光调节中,又可以分为手动调节和自动调节两个功能,Android定义背光值0-255。日常调试过程中,我们可以直接cat/sys/class/leds/lcd-backlight/brightness的值,来获得当前屏幕背光...
2017-06-27 19:16:14
8599
原创 Monkey测试实际Native Crash问题的分析与解决思路
从事andriod系统开发以来接触了不少crash相关的问题,对于Crash分为Framework/App Crash, Native Crash,以及Kernel Crash对于他们的解释对于framework层或者app层的Crash(即Java层面Crash),那么往往是通过抛出未捕获异常而导致的Crash,这个内容在本文的姊妹篇理解Android Crash处理流程已详
2017-02-22 17:40:30
4583
转载 Android Native Crash崩溃及错误原因
转自 刀锋铁骑:常见Android Native崩溃及错误原因http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=27&extra=page=4一、什么是Android的C/C++ NativeCrash Android上的Crash可以分两种:1、Java Crashjava代码导致jvm退出,弹出“程序已经崩溃”
2017-02-22 17:21:04
4183
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人