![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android再进阶
秋山澪与折木奉太郎的爱
这个作者很懒,什么都没留下…
展开
-
获取U盘插拔的广播(动态注册)
U盘的插拔消息,需要设置Receiver并且设置过滤器才可以获取到广播消息。注册的方法如下:设置过滤器IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);intentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);intentFilter.addAction(Intent.ACTION_MEDIA_R原创 2021-02-04 17:18:08 · 712 阅读 · 0 评论 -
Android再进阶之热修复原理
一个App的一个版本出现了严重的BUG,我们如果采用重新编译生成App的方式,不但要花费很长的时间编译,而且用户也需要重新下载安装,花费的代价过高,这个时候就需要热修复技术了。主流的框架有很多,比如:AndFix、Tinker、Amigo、QQ空间、Robust、Aceso。下面就资源修复、代码修复、动态链接库修复三个方面进行介绍。资源修复许多框架的资源修复都参考了Instant Run的资源修复的原理。Instant Run概述传统的需要重新安装App,Instant可以避免这种情况。In原创 2020-11-21 20:53:13 · 140 阅读 · 1 评论 -
Android再进阶之ClassLoader介绍
为了更好地理解Android中的ClassLoader,会先介绍Java中的ClassLoader,之后,再介绍Android的。Java中的ClassLoaderClassLoader的类型Java中的类加载器主要有两种类型,即系统类加载器和自定义类加载器。而系统类加载器包括3种,分别是Bootstrap ClassLoader(C++实现)、Extensions ClassLoader和Application ClassLoader。下面看一下ClassLoader的继承关系:对五个原创 2020-11-21 15:43:08 · 222 阅读 · 0 评论 -
Android再进阶之从Dalvik到ART虚拟机
众所周知,Android虚拟机不同于Java虚拟机,为了更高的编译速度,没有基于栈,而是基于寄存器。下面就来介绍整个Android虚拟机的演变过程。自己做个目录。说一下主要的内容,不浪费阅读者的时间。主要讲了DVM到ART的转变。Dalvik虚拟机的简单介绍,它的运行时堆重点介绍了。ART虚拟机的简单介绍,它的运行时堆重点介绍了。GC垃圾回收因为太费时间了,没有说。区别主要集中介绍了编译的方式的转变,例如:JIT、AOT的引入,以及即时JIT的引入。Dalvik虚拟机1.DVM与JVM原创 2020-11-20 22:15:17 · 308 阅读 · 0 评论 -
Android再进阶之WindowManagerService简介
WindowManagerService(WMS)作为系统中重要的服务,有了解的必要。创建比较难解释,直接介绍它的成员。WMS的重要成员mPolicy:WindowManagerPolicy。它是WMP(WindowManagerPolicy)类型的变量,WMP是窗口策略的接口类,用来定义一个窗口策略所要遵循的通用规范,并提供了WindowManager所有的特定的UI行为。mSessions:ArraySet。它的元素类型为Session,主要用于进程间通信,其它的应用程序想要和WMS进原创 2020-11-20 10:42:43 · 635 阅读 · 0 评论 -
Android再进阶之Content Provider启动过程
Content Provider提供进程内和进程间的数据共享。它的启动分为两个部分。query方法到AMS的调用过程。使用query方法后,它通过acquireUnstableProvider方法,返回IContentProvider类型的unstableProvider对象,IContentProvider是ContentProvider在本地的代理,acquireUnstableProvider方法中返回了ActivityThread类型的mMainThread对象的acquireProvid原创 2020-11-17 22:26:41 · 234 阅读 · 0 评论 -
Android再进阶之广播发送、接收和注册过程
广播的注册分为静态注册和动态注册,静态注册在应用安装的时候由PackageManagerService来完成注册。这里只介绍动态注册。动态注册调用registerReceiver方法,它在ContextWrapper中实现,mBase具体指向就是ContextImpl,ContextImpl的registerReceiver方法有很多重载的方法,最终调用registerReceiverInternal方法,它会调用IActivityManager的registerReceiver方法,最终调..原创 2020-11-17 16:58:56 · 184 阅读 · 0 评论 -
Android再进阶之Service绑定
可以通过Context的startService来启动Service,也可以通过Context的bindService来绑定Service。这个过程比较复杂。ContextImpl到AMS的调用过程首先,调用bindService方法来绑定Service,它在ContextWrapper中实现,接着ContextImpl的ContextImpl的bindService方法,它会返回bindServiceCommon方法,调用IActivityManager的bindService方法。最后,调用A原创 2020-11-17 15:49:20 · 330 阅读 · 0 评论 -
Android再进阶之Service的启动过程
作为Android的四大组件之一,Service的启动有了解的必要。它的启动和Activity的启动具有相似的地方。ContextImpl到AMS的调用过程首先,会调用ContextWrapper的startService方法,它会调用ContextImpl的startServiceCommon方法,之后会调AMS的代理IActivityManager的startService方法,最后,调用的是AMS的startService。ActivityThread启动Service接着上面,原创 2020-11-17 11:19:55 · 118 阅读 · 0 评论 -
Android再进阶之Activity启动过程
作为Android四大组件之一,Activity启动有必要了解。Activity分为根Activity和普通Activity。只介绍根Activity的启动。Launcher请求AMS过程点击应用程序的快捷图标时,就会调用Launcher的startActivitySafely方法,它会将Flag设置为Intent.FLAG_ACTIVITY_NEW_TASK,Activity会在新的任务栈中启动,调用startActivity方法,它实现于Activity中。startActivity方原创 2020-11-16 20:59:52 · 113 阅读 · 0 评论 -
Android再进阶之Binder线程池启动与消息循环创建过程
应用程序进程的启动过程中会启动Binder线程池,它的启动过程也有必要了解。Binder线程池启动ZygoteInit类的zygoteInit的方法,中会调用nativeZygoteInit方法,它是一个JNI方法,在JNINativeMethod数组中可以得知它对应的函数是com_android_os_ZygoteInit_nativeZygoteInit,它里面包含gCurRuntime是AndroidRuntimr类型的指针,而AppRuntime继承自AndroidRuntime.And原创 2020-11-15 22:21:23 · 412 阅读 · 0 评论 -
Android再进阶之应用程序进程启动过程
注意是应用程序进程的启动过程,不是应用程序启动过程。应用程序启动之前要保证该应用程序的进程已经启动。应用程序进程的启动过程如下:AMS发送启动应用程序进程请求。首先,AMS会调用startProcessLocked方法,向Zygote进程发送请求。它会创建应用程序进程的用户ID,对用户ID进行创建和赋值。调用Process的start方法。它会调用ZygoteProcess的start方法,而这个方法又会调用startViaZygote方法、zygoteSendArgsAndGetResult原创 2020-11-15 12:16:41 · 101 阅读 · 0 评论 -
Android再进阶之Launcher启动过程
系统启动的最后一步,就是启动一个应用程序来显示已经安装的应用程序,而这个应用程序就是Launcher。Launcher启动过程中,会请求PackageManagerService返回系统中已经安装的应用程序的信息,并且将这些信息封装成一个快捷图标列表显示在系统屏幕上。简单来说,Launcher就是系统的桌面,它主要有下面两个作用:作为Android系统的启动器,用于启动应用程序。作为Andorid系统的桌面,用于显示和管理应用程序的快捷图标或者其他桌面组件。Launcher的启动过程如下:原创 2020-11-14 23:28:31 · 473 阅读 · 0 评论 -
Android再进阶之SystemServer进程启动
SystemServer进程主要用于创建系统服务,AMS、WMS和PMS都是它创建的。SystemServer进程在ZygoteInit.java中的startSystemServer方法中启动,SystemServer进程复制了Zygote进程的地址空间,也会得到Zygote进程的Socket,由于对于自己本身这个Socket没有用处,因此会对其进行关闭。调用handleSystemServerProcess方法来启动SystemServer进程。SystemServer进程的启动过程如下:原创 2020-11-14 22:33:22 · 185 阅读 · 0 评论 -
Android再进阶之Zygote进程启动过程
Zygote进程。在Android系统中,DVM(Dalvik虚拟机)和ART、应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程创建的。Zygote进程的启动过程如下:创建AppRunTime并调用其start方法,启动Zygote进程。创建Java虚拟机并为Java虚拟机注册JNI方法。通过JNI调用ZygoteInit的main函数进入Zygote的Java框架层。通过registerZygoteSocket方法创建服务器端Socket,并通过run原创 2020-11-14 21:13:51 · 103 阅读 · 0 评论 -
Android再进阶之init进程启动
Android系统启动的时候,init进程的启动是重要的一环。init进程是Android系统中用户空间的第一个进程,进程号为1。init进程由多个源文件共同组成,这些文件位于源码目录system/core/init中。先介绍在init进程启动之前的流程。如下:启动电源及系统启动引导程序BootLoaderLinux内核启动init进程启动1. 在Linux内核启动之后,它会在系统文件中查找init.rc文件,启动init进程,而在init的main函数中,大概做了这么几件事:开始的原创 2020-11-13 09:42:59 · 142 阅读 · 0 评论