
Android进阶
氦客
Stay hungry,Stay foolish
展开
-
Android中的多进程模式
Android中的多进程模式应用应自身需要需采用多进程 有些模块因特殊原因需运行在单独进程为了加大一个应用可使用的内存,使用多进程来获取多份内存空间 Android对单个应用的最大内存做了限制,早期的为16M,不同设备大小不同调用系统或第三方平台应用。由于是两个进程,所以必须使用跨进程的方式开启多进程模式创建新的进程,在多进程模式中,不同进程的组件会拥有独立的虚拟机,原创 2016-12-16 00:16:36 · 848 阅读 · 0 评论 -
JVM的垃圾回收机制
JVM的垃圾回收机制引用计数、标记清除等策略JVM主要包含的部分方法区 (Method Area)Java 堆 (Heap)Java 栈 (Stack)程序计数器 (PC register)本地方法栈 (NativeMethod Stack)内存分配方法区和Java堆中的回收是动态的,我们所说的垃圾回收也是针对这两块。 回收策略一般包含两个步骤,一个是...原创 2018-04-18 07:52:45 · 331 阅读 · 0 评论 -
各种Window的创建过程
Window的创建过程Activity的Window创建过程Activity的启动最终会通过ActivityThread#performLaunchActivity()来完成。 ActivityThread#performLaunchActivity()private Activity performLaunchActivity(ActivityClientRecord r, Intent cus原创 2017-02-05 23:22:19 · 685 阅读 · 0 评论 -
ContentProvider的工作过程
ContentProvider的工作过程ContentProvider的调用过程ContentProvider所在的进程启动时,ContentProvider会同时启动并发布到AMS中。ContentProvider的onCreate要先于Application的onCreate而执行。 访问ContentProvider需要通过ContentResolver,ContentResolver是一个原创 2017-02-15 22:34:28 · 978 阅读 · 0 评论 -
Android控件架构
Android控件架构View结构整个界面的控件是一个树形结构。 上层控件负责下层子控件的测量和绘制,并传递交互事件。 每个树的顶部,都有一个ViewParent对象,所有的交互管理事件都由它来统一调度和分配,从而可以对整个视图进行整体控制。 findViewById()就是在控件树中以树的深度有限遍历来查找对应元素Activity UI架构每一个Activity都包含一个Window对原创 2017-02-19 11:15:59 · 535 阅读 · 0 评论 -
顶层视图DecorView添加到窗口的过程
顶层视图DecorView添加到窗口的过程在ActivityThread中,当Activity被创建完毕后,会将DecorView添加到Window中。 ActivityThread#handleResumeActivity() final void handleResumeActivity(IBinder token, boolean clearHide, boolean isF原创 2017-02-18 12:15:17 · 1553 阅读 · 0 评论 -
View的滑动冲突
View的滑动冲突外部滑动方法和内部滑动方向不一致 根据滑动时水平的还是竖直的 滑动路径和水平方向所成的夹角水平方法和竖直方向的距离差水平和竖直方向的速度差来做判断外部滑动方向和内部滑动方向一致 从业务上进行区分上面两种情况的嵌套 用1和2的方法一起使用进行区分解决方法外部拦截法父容器决定事件是否拦截 [伪代码] public boolean onInterceptHover原创 2017-02-18 11:57:29 · 414 阅读 · 0 评论 -
属性动画的工作原理
属性动画的工作原理以ObjectAnimator.ofInt(button,”width”,500).setDuration(5000).start()为例。 ObjectAnimator#start() @Overridepublic void start() { // See if any of the current active/pending animators need t原创 2017-01-18 21:51:43 · 914 阅读 · 0 评论 -
通过ViewTreeObserver获取View最终的大小及源码分析
通过ViewTreeObserver获取View最终的大小及源码分析在Activity#onCreate()中设置监听 当View树的状态发生改变或者View的内部的View可见性发生改变时,onGlobalLayout方法会被调用 @Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(原创 2017-01-12 03:06:55 · 960 阅读 · 0 评论 -
Window和WindowManager
Window和WindowManagerWindow是一个抽象的概念,每一个Window都对应一个View和一个ViewRootImpl,Window和View通过ViewRootImpl来建立联系。 在实际使用中无法直接访问Window,对Window的访问必须通过Windowmanager。 Window实际上是View的直接管理者 Android中所有的视图都是通过Window来呈现的,原创 2017-02-04 23:02:11 · 560 阅读 · 0 评论 -
Android IPC基础
IPC进程间通信 IPC不是Android中独有 Window系统: 通过剪切板、管道和油槽等来进行进程间通信。 Linux系统:可以通过命名管道、共享内存、信号量等来进行进程间通信。IPC基础Serializable接口public class User implements Serializable { private static final long serialVersio原创 2016-12-20 21:24:16 · 641 阅读 · 0 评论 -
Activity的启动模式(LaunchMode)
Activity的启动模式(LaunchMode)standard默认启动模式singleTop如果栈顶Activity是要启动的Activity,则不创建新的Activity而直接引用这个Activity,同时,onNewIntent方法会被调用。如果不是,则与standard相同。解决重复创建栈顶Activity的问题SingleTask检查整个Activity栈中是否存在当前需要启动的Act原创 2016-12-29 21:37:43 · 680 阅读 · 0 评论 -
Activity的生命周期
Activity的生命周期onCreate Activity开始创建,可做一些初始化工作 onRestart Activity正在重启,(当Activity从不可见到可见时触发) onStart Activity正在启动,可见,还在后台 (用户还看不到) onResume Activity可见,已在前台 onPause Activity正在停止 正常情况,之后onStop会被调用原创 2016-12-27 21:46:55 · 880 阅读 · 0 评论 -
Android AIDL注意点
AIDL注意点如果AIDL Server 出现了崩溃 (不是AIDL调用的方法) 的情况下,Client可通过死亡代理(IBinder.DeathRecipient)注册监听,进行重新远程绑定Service private IBinder.DeathRecipient deathRecipient = new IBinder.DeathRecipient() { @Override原创 2016-12-26 22:24:32 · 5032 阅读 · 0 评论 -
Android中的IPC方式
Android中的IPC方式BundleActivity、Service、Receiver都是支持Intent中传递Bundle数据的 Bundle实现了Parcelable 接口,所以它可以方便地在不同的进程间传输。当我们在一个进程中启动另外一个进程的Activity、Service、Receiver,我们就可以在Bundle中附加我们需要传输给远程进程的信息并通过Intent发送出去。(传输的原创 2016-12-26 22:21:07 · 525 阅读 · 0 评论 -
View的工作原理
View的工作原理ViewRoot和DecorViewViewRoot对应于ViewRootImpl类,它是连接WindowManager和DecorView的纽带,View的三大流程均通过ViewRoot来完成的。 View的绘制流程是从ViewRoot的performTranversals开始的,经过measure -> layout -> draw,才能将一个V...原创 2018-07-15 10:22:22 · 243 阅读 · 0 评论