随笔分类 -  android知识点复习与总结

android知识点复习与总结 一步一步往上爬
摘要:AMS对象随系统进程启动而构建,随着系统进程退出而消亡,可以说,AMS与系统进程共存亡。 先上一张总的启动时序图: 上图分为三个步骤: 1.初始化系统进程的运行环境 SystemServer是我们理解Android系统进程的入口,它的初始化是从Native层开始的:Zygote从Native层调用S 阅读全文
posted @ 2019-01-22 17:49 Leo的银弹 阅读(829) 评论(0) 推荐(0)
摘要:1. 概览 Activity的管理有静态和动态两层涵义: 静态是指Activity的代码组织结构,即Application中声明的Activity的集合,这些Activity被组织在一个APK中,有特定的包名。 在编写应用程序时,Activity对应到用户界面,它定义了用户界面的布局、交互行为、启动 阅读全文
posted @ 2019-01-15 16:44 Leo的银弹 阅读(2683) 评论(0) 推荐(0)
摘要:activity-alias标签元素众所周知,AndroidManifest是一个xml文件,它包含很多标签元素,如application、activity、receiver等,其中有一个叫做activity-alias,因为该标签平时很少用到,可能大家对这个标签还不是很熟悉。 activity-a 阅读全文
posted @ 2019-01-14 17:56 Leo的银弹 阅读(1715) 评论(0) 推荐(2)
摘要:1. Watchdog初始 Watchdog的中文的“看门狗”,有保护的意思。最早引入Watchdog是在单片机系统中,由于单片机的工作环境容易受到外界磁场的干扰,导致程序“跑飞”,造成整个系统无法正常工作,因此,引入了一个“看门狗”,对单片机的运行状态进行实时监测,针对运行故障做一些保护处理,譬如 阅读全文
posted @ 2019-01-07 17:32 Leo的银弹 阅读(872) 评论(0) 推荐(0)
摘要:Android系统中,有硬件WatchDog用于定时检测关键硬件是否正常工作,类似地,在framework层有一个软件WatchDog用于定期检测关键系统服务是否发生死锁事件。 watchdog的源码很简单,主要有两个功能 1监控system_server中几个关键的锁,原理就是在android_f 阅读全文
posted @ 2018-12-26 17:35 Leo的银弹 阅读(2173) 评论(0) 推荐(0)
摘要:ANR时间区别便是指当前这次的事件dispatch过程中执行findFocusedWindowTargetsLocked()方法到下一次执行resetANRTimeoutsLocked()的时间区间. 以下5个时机会reset. 都位于InputDispatcher.cpp文件: resetAndD 阅读全文
posted @ 2018-12-25 17:27 Leo的银弹 阅读(2860) 评论(0) 推荐(0)
摘要:ANR(Application Not responding),是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。 造成ANR的场景: Service Timeout:比如前台服务在20s内未执行完成; 阅读全文
posted @ 2018-12-25 17:08 Leo的银弹 阅读(831) 评论(0) 推荐(0)
摘要:SystemServer由Zygote fork生成的,进程名为system_server,该进程承载着framework的核心服务. 调用流程如下: 上图前4步骤(即颜色为紫色的流程)运行在是Zygote进程,从第5步(即颜色为蓝色的流程)ZygoteInit.handleSystemServer 阅读全文
posted @ 2018-12-21 16:48 Leo的银弹 阅读(2857) 评论(0) 推荐(1)
摘要:Zygote是由init进程通过解析 init.zygote.rc 文件而创建的,zygote所对应的可执行程序 app_process,所对应的源文件是App_main.cpp,进程名为zygote。 Zygote重启的情况(四种) servicemanager进程被杀; (onresart) s 阅读全文
posted @ 2018-12-19 17:17 Leo的银弹 阅读(527) 评论(0) 推荐(0)
摘要:JIT与Dalvik JIT是"Just In Time Compiler"的缩写,就是"即时编译技术",与Dalvik虚拟机相关。 怎么理解这句话呢?这要从Android的一些特性说起。 JIT是在2.2版本提出的,目的是为了提高Android的运行速度,一直存活到4.4版本,因为在4.4之后的R 阅读全文
posted @ 2018-12-17 19:11 Leo的银弹 阅读(500) 评论(0) 推荐(0)
摘要:##内部存储 总是可用的 这里的文件默认是只能被你的app所访问的。 当用户卸载你的app的时候,系统会把internal里面的相关文件都清除干净。 Internal是在你想确保不被用户与其他app所访问的最佳存储区域。 ##外部存储 并不总是可用的,因为用户可以选择把这部分作为USB存储模式,这样 阅读全文
posted @ 2018-12-17 19:10 Leo的银弹 阅读(731) 评论(0) 推荐(0)
摘要:几个系统关键对象: ActivityManagerServices,简称AMS,服务端对象,负责系统中所有Activity的生命周期 ActivityThread,App的真正入口。当开启App之后,会调用main()开始运行,开启消息循环队列,这就是传说中的UI线程或者叫主线程。与Activity 阅读全文
posted @ 2018-12-17 18:56 Leo的银弹 阅读(348) 评论(0) 推荐(0)
摘要:布局过程,就是程序在运行时利用布局文件的代码来计算出实际尺寸的过程。 布局分为两个阶段:测量阶段和布局阶段。 测量阶段:从上到下递归地调用每个 View 或者 ViewGroup 的 measure() 方法,测量他们的尺寸并计算它们的位置; 布局阶段:从上到下递归地调用每个 View 或者 Vie 阅读全文
posted @ 2018-11-30 16:44 Leo的银弹 阅读(210) 评论(0) 推荐(0)
摘要:在 Android 里,硬件加速专指把 View 中绘制的计算工作交给 GPU 来处理。 进一步地再明确一下,这个「绘制的计算工作」指的就是把绘制方法中的那些 Canvas.drawXXX() 变成实际的像素这件事。 在硬件加速关闭的时候,Canvas 绘制的工作方式是: 把要绘制的内容写进一个 B 阅读全文
posted @ 2018-11-29 14:31 Leo的银弹 阅读(381) 评论(0) 推荐(0)
摘要:如果要多个动画配合工作,需要把他们放入AnimatorSet中 使用 playSequentially(),就可以让两个动画依次播放,而不用为它们设置监听器来手动为他们监管协作。 使用playTogether(),就可以让两个动画同时播放 还可以用play with/before/after这种形式 阅读全文
posted @ 2018-11-28 16:29 Leo的银弹 阅读(226) 评论(0) 推荐(0)
摘要:很多时候,你在同一个动画中会需要改变多个属性,例如在改变透明度的同时改变尺寸。 如果使用 ViewPropertyAnimator,你可以直接用连写的方式来在一个动画中同时改变多个属性: 而对于 ObjectAnimator,是不能这么用的。不过你可以使用 PropertyValuesHolder  阅读全文
posted @ 2018-11-28 16:21 Leo的银弹 阅读(345) 评论(0) 推荐(0)
摘要:ViewPropertyAnimation 使用方式:View.animate() 后跟 translationX() 等方法,动画会自动执行。 注意translationX实现是调用对应的set方法而不是直接给该名字的属性赋值,必须提供set方法才能生效 animate后面具体可以跟的方法以及方法 阅读全文
posted @ 2018-11-27 16:48 Leo的银弹 阅读(594) 评论(0) 推荐(0)
摘要:Canvas的几何变换是倒序的,Matrix是正序。 比如先平移在旋转: canvas.rotate(); canvas.translate(); //translate先执行,rotate后执行 Matrix里面就好比维护者一个双端队列,当调用preXxx方法时,将该方法放入队列的顶端,(即每来一 阅读全文
posted @ 2018-11-27 15:06 Leo的银弹 阅读(838) 评论(0) 推荐(0)
摘要:1.写在 super.onDraw() 的下面 把绘制代码写在 super.onDraw() 的下面,由于绘制代码会在原有内容绘制结束之后才执行,所以绘制内容就会盖住控件原来的内容。 2.写在 super.onDraw() 的上面 如果把绘制代码写在 super.onDraw() 的上面,由于绘制代 阅读全文
posted @ 2018-11-23 17:26 Leo的银弹 阅读(307) 评论(0) 推荐(0)
摘要:范围裁切 clipRect() clipPath() 和clipRect一样,不过是把坐标换成了path,可以实现更多形状裁切 几何变换 几何变换大概包括三类 1.使用 Canvas 来做常见的二维变换; 2.使用 Matrix 来做常见和不常见的二维变换; 3.使用 Camera 来做三维变换 C 阅读全文
posted @ 2018-11-23 16:24 Leo的银弹 阅读(501) 评论(0) 推荐(0)