Android-进阶
四夕口鸟
Coding赚点奶粉钱
展开
-
SDK - (1) - AsyncTask
一、什么是AsyncTask1、是一种轻量级的异步任务类;2、是一个封装了线程池和Handler的异步框架;3、使用它可以更加方便的执行后台任务以及在主线程访问UI,但他不适合进行特别耗时的后台任务;二、AsyncTask的使用方法1、3个参数Params:执行AsyncTask时,后台任务需要传入的参数,在doInBackground中取出使用。Progress...原创 2019-12-01 20:50:12 · 88 阅读 · 0 评论 -
SDK - (2) - Handler
1、不允许在子线程中访问UI?UI控件非线程安全,多线程中并发访问会导致UI控件处于不可预期的状态。UI控件不上锁机制的原因有:上锁会让UI控件变得复杂和低效上锁后会阻塞某些进程的执行2、Handler.postDelayed()是否精确延时?当上一个消息存在耗时任务的时候,会占用延时任务执行的时机,当上一个任务耗用总时超过上下任务执行时间的时间差时,后一个任务会被延时...原创 2019-12-01 20:52:28 · 119 阅读 · 0 评论 -
SDK - (3) - Binder
一、Linux的IPC方式1、管道(Pipe)及有名管道(named pipe)2、信号(Signal)3、报文(Message)队列(消息队列)4、共享内存5、信号量(semaphore)6、套接字(Socket)二、BinderAndroid独有的跨进程通信方式,具备传输效率较高、安全性更高、稳定性更好等特点。1、传输效率较高 -> 传输过程数据...原创 2019-12-15 20:14:09 · 147 阅读 · 0 评论 -
SDK - (4) - AIDL
一、使用步骤1、创建AIDL文件 写提供服务的接口方法2、创建服务Service,覆盖Bind方法 返回bind对象。3、bindService获取Service代理对象参考:https://www.jianshu.com/p/467016b4487c二、支持的类型三、自定义object需满足下面2个条件1、实现Parcelable接口...原创 2019-12-16 21:41:44 · 182 阅读 · 0 评论 -
SDK - (5) - ArrayMap
一、内部结构二、原理数据结构2个数组,一个存key的hash值 ,一个存key和value的值。Get操作 -> 通过key值得到hash值 -> 通过2分查找求出index (数据量大 效率降低原因之一) -> key = Arrays[2*index] value = Arrays[2*index +1] ...原创 2019-12-16 21:46:38 · 151 阅读 · 0 评论 -
Framework(1) - 概述
一、Android SystemAndroid系统从下到上分为Linux 内核、硬件抽象、系统库和Dalvik、Framework、应用层5大部分。1、应用层Android的应用程序主要是用户界面(User Interface)方面的,通常以JAVA程序编写,其中还可以包含各种资源文件(放置在res目录中)JAVA程序及相关资源经过编译后,将生成一个APK包。Andro...原创 2019-11-30 20:46:37 · 271 阅读 · 0 评论 -
Framework(2) - APP打包
一、打包步骤第一步:打包资源文件,通过Appt工具生成R.java和resources.ap文件Resource文件(就是工程中res中的文件)、Assets文件、AndroidManifest.xml文件。如果是多moudle或project项目,都会合并到主工程目录下的resources.ap.第二步:处理AIDL文件,通过aidi工具生成对应的.java文件第三步:处理源...原创 2019-12-01 20:35:39 · 174 阅读 · 0 评论 -
Framework(3) - APP安装
一、安装业务流程第一步:拷贝apk文件到指定目录 -> /data/app第二步:解压apk,拷贝文件,创建应用的数据目录 -> /data/data/包名 (database、files、xml、cache等)第三步:将app的可执行文件dex拷贝到 /data/dalvik-cache 目录,缓存起来。(为了加快app的启动速度)第四步:解析apk的AndroidM...原创 2019-12-01 20:39:14 · 357 阅读 · 0 评论 -
Framework(4) - APP启动
Launcher本身就是一个应用程序,我们启动app时的本质是对Launcher这个app进行操作。Launcher接收到点击事件时调用startActivity方法,进行activity的跳转。但是与我们平时开发app有所不同,我们要启动的Activity所在的app运行在另外一个进程中,这就涉及到跨进程通信(IPC,Inter-Process Communication)。Android中...原创 2019-12-01 20:45:50 · 224 阅读 · 0 评论 -
Framework(5) - 系统启动
一、大致流程Cpu -> bootLoader ->native daemons -> android runtime -> zygote进程 -> systemService -> ams -> lanuch二、启动层级BootLoader引导 BootLoader是一段引导程序,类似于Windows开机时的出现第一个画面(有品牌...原创 2019-12-01 20:47:00 · 144 阅读 · 0 评论 -
Framework(8) - WMS
一、主要功能 (1)计算与管理窗口的位置、层次(控制窗口的显示与隐藏的以及要显示的位置) (2)根据(1)来渲染窗口动画 (3)持有SurfaceControl,在Surface初始化的时候,会初始化一个Canvas(画布)二、主要成员mDecor:DecorView的实例,标示Window内部的顶级视图。mContentRoot:是DecorView的唯...原创 2019-12-01 20:48:18 · 151 阅读 · 0 评论 -
三方 - (11) - 组件化
一.组件化需解决的问题1、组件之间 - 通信问题 数据通信 - 接口下沉 界面 - Arouter 事件 - EventBus2、组件单独运行 - Application 和 module 切换 gradle自定...原创 2019-12-06 22:33:39 · 169 阅读 · 0 评论 -
三方 - (10) - 热修复
一、热修复类别阿里系:阿里百川HotFix、DeXposed从底层二进制c语言入手 腾讯系:QQ空间的超级补丁、微信的Tinker (从java加载机制入手)二、类加载器类别 1. PathClassLoader:只能加载已经安装到Android系统中的apk文件(/data/app目录),是Android默认使用的类加载器。 2. DexClassLoader:可以...原创 2019-12-06 22:36:50 · 95 阅读 · 0 评论 -
三方 - (9) - 插件化
一、插件化需解决的问题1、插件dex加载问题通过反射拿到DexClassLoader,解析插件dex与宿主dex合并后,重新插入宿主DexPathList中。2、插件组件生命周期问题提前占坑注册代理组件, 在校验前保存真实跳转信息,利用代理组件通过系统校验, 校验后拦截h跳转,取出信息完成启动。3、插件之间资源id冲突问题重写Context的getAsset、g...原创 2019-12-06 22:35:04 · 75 阅读 · 0 评论 -
三方 - (3) - Arouter
官方中文介绍:https://github.com/alibaba/ARouter/blob/master/README_CN.md一、基本使用1、添加依赖android { defaultConfig { javaCompileOptions { annotationProcessorOptions { ...原创 2019-12-06 22:40:22 · 161 阅读 · 0 评论