Android 插件化系列文章目录 【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化...| 静态代理 ) 【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 一 | Activity 进程相关源码 ) 【Android 插件化】Hook...) 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 主线程创建 Activity 实例之前使用插件 Activity 类替换占位的组件 ) ---- 文章目录...Android 插件化系列文章目录 一、插件包 Activity 启动原理 二、分析主线程中创建 Activity 实例源码 1、LaunchActivityItem 2、ActivityThread...执行 Activity 启动 , 执行了一系列的操作后 , 需要在主线程中进行实例化 , 这些操作暂时不管 , 与 Hook 无关 , 直接开始分析 主线程中的 Activity 实例化操作 ; Activity
1.2 启动模式 ---- LaunchMode 说明 standard 系统在启动它的任务中创建 activity 的新实例 singleTop 如果activity的实例已存在于当前任务的顶部,则系统通过调用其...onNewIntent(),否则会创建新实例 singleTask 系统创建新 task 并在 task 的根目录下实例化 activity。...但如果 activity 的实例已存在于单独的任务中,则调用其 onNewIntent() 方法,其上面的实例会被移除栈。...并且每个应用程序都运行在各自的虚拟机中,应用程序每次运行都要重新初始化并启动虚拟机,这就相当耗时。...在 android 中,应用程序运行前,Zygote 进程通过共享已运行的虚拟机的代码与内存信息,缩短应用程序运行所耗费的时间。
image.png 每一个活动( Activity )都处于某一个状态,对于开发者来说,是无法控制其应用程序处于某一个状态的,这些均由系统来完成。...活动如果没有在前台运行,都将被停止或者Linux管理进程为了给新的活动预留足够的存储空间而随时结束这些活动。因此对于开发者来说,在设计应用程序的时候,必须时刻牢记这一原则。...当决定某个应用程序是否要终结去释放资源,Android内存管理使用栈来决定基于Activity的应用程序的优先级。...当一个Activity变为完全隐藏,它将会变成停止。 停止:当一个Activity不是可视的,它“停止”了。这个Activity将仍然在内存中保存它所有的状态和会员信息。...是否允许多个实例 “standard”和”singleTop”可以被实例化多次,并且是可以存在于不同的task中;这种实例化时一个task可以包括一个activity的多个实例; “singleTask
一、安卓四大组件 Activity:是所有Android应用程序的门面,凡是在应用中你看到的东西,都是在里面。每一个Activity都独立于其他Activity而存在。...决定应用程序最先启动的Activity android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里 上面两个标签必须同时有,缺一不可。...使用隐式 Intent 启动服务存在安全隐患,因为您无法确定哪些服务将响应 Intent,且用户无法看到哪些服务已启动。...,系统才会考虑回收 停止:当一个Activity不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态,当其他地方需要内存时,极有可能会被系统回收 销毁:当一个Activity从返回栈移除后就变成了销毁状态...一旦启动,服务即可在后台无限期运行,即使启动服务的组件已被销毁也不受影响,除非手动调用才能停止服务, 已启动的服务通常是执行单一操作,而且不会将结果返回给调用方。
前言 小伙伴们,在之前的系列文章我们分别介绍了Android视图组件及布局相关的内容,从本文开始我们继续盘点介绍Android开发中另一个比较重要的内容,Android四大组件,第一个 Activity...一 Activity基本介绍 Activity是Android应用程序的一个核心组件,用于提供用户界面和交互。...可见性阶段: onStart():当Activity变得可见但还无法与用户交互时调用。此时Activity仍然位于前台,但未获得焦点。...重启阶段(可选): onRestart():当已停止的Activity再次启动时调用,此方法在Activity从后台重新回到前台时调用。...七 总结 总之,Activity是Android应用程序开发的重要组件,它处理用户界面和交互,并提供了生命周期管理、布局和视图管理、意图启动等核心功能,帮助开发者构建丰富、交互性强的应用程序。
概述 Android 4.0 (其实在3.1的版本中Google已经给出了说明)无法接收开机广播的问题本身是因为,如果应用程序安装上始终没有被打开过,那么在Android启动时,该应用无法接收到开机时的系统广播...对应翻译 启动停止程序控制 从Android 3.1开始,系统的软件包管理器跟踪处于停止状态(stopped state)的应用程序,控制其启动后台进程和其他应用程序提供了一种手段。...需要注意的是应用程序的停止状态(stopped state)和Activity的停止状态是不一样的。该系统可以分别管理这两种停止状态。...FLAG_INCLUDE_STOPPED_PACKAGES -包括在停止的应用程序列表中。 FLAG_EXCLUDE_STOPPED_PACKAGES -排除在停止的应用程序列表中。...应用程序处于停止状态情况有两种:一种是他们是第一次安装,但尚未启动 ;另一种是在管理应用程序中由用户手动停止。 ---- 在4.0中android取消了无主activity运行的线程。
android.intent.action.MAIN 决定应用程序最先启动的Activity。...onStart() 方法会非常快速地完成,并且与“已创建”状态一样,Activity 不会一直处于“已开始”状态。...因为在该方法完成之前,此类工作可能无法完成。 已进入已停止状态,因此系统将调用 onStop() 回调。举例而言,如果新启动的 Activity 覆盖整个屏幕,就可能会发生这种情况。...可见生存期:onStart()方法与onStop()方法就是可见生存期,Activity对于用户是可见的,但无法与用户交互。...之后无论哪个应用程序启动该Activity,都只会调用栈中该实例。 11.
onStart // onStart 此方法被回调时表示Activity正在启动,此时Activity已处于可见状态,只是还没有在前台显示,因此无法与用户进行交互。...可以简单理解为Activity已显示而我们无法看见摆了。...当然从流程图,我们也可以看出当Activity停止后(onPause方法和onStop方法被调用),重新回到前台时也会调用onResume方法,因此我们也可以在onResume方法中初始化一些资源,比如重新初始化在...standard 模式是 android 的默认启动模式,在这种模式下,activity 可以有多个实例,每次启动 Activity,无论任务栈中是否已经存在这个 activity 的实例,系统都会创建一个新的...activity 实例。
前言 在几个月前我写了Android深入四大组件(一)应用程序启动过程这篇文章,它是基于Android 7.0的,当我开始阅读Android 8.0源码时发现应用程序(根Activity)启动过程照Android...我们接着来查看ApplicationThread的scheduleLaunchActivity方法,其中ApplicationThread是ActivityThread的内部类,应用程序进程创建后会运行代表主线程的实例...应用程序进程要启动Activity时需要将该Activity所属的APK加载进来,而LoadedApk就是用来描述已加载的APK文件。...如果该Activity为null则会通知AMS停止启动Activity。...注释5处根据ComponentName中存储的Activity类名,用类加载器来创建该Activity的实例。
它通过监测对象引用关系,识别无法被垃圾回收的对象,提供详细的报告,帮助开发者精确定位内存泄漏的根本原因。这使得开发者能够更轻松地应对内存泄漏挑战,确保应用程序的性能和稳定性。...android:minSdkVersion="14">: 这是使用SDK的声明,指定了应用程序支持的最低SDK版本为14。...android:exported="false": 这是服务的导出属性,指定了服务是否可以被其他应用程序访问。...这段代码我们可以看出他是通过ActivityLifecycleCallbacks计算start-stop的Activity个数来实现来判断应用是否在前台 至此基本该初始化的初始化,该注册的注册,下面研究如何检测内存泄漏...it.hasReferent } // 如果存在保留但未引用的弱引用实例,将其计数添加到元数据中 // 这种情况很少发生,因为我们通常在堆转储之前删除所有已清除的弱引用 val metadataWithCount
Android 应用程序的生命周期是由Android 框架进行管理,而不是由应用程序直接控制。...不管是使用者或开发者, 都无法确定的应用程序何时会被回收。所以为了很好的防止数据丢失和其他问题,了解生命周期很重要。 2.2 Activity 生命周期: ?...暂停的Activity仍然是存活状态(它保留着所有的状态和成员信息并保持和窗口管理器的连接),但是当系统内存极小时可以被系统杀掉 3.Stopped——停止状态 完全被另一个Activity遮挡时处于停止状态...1. onCreate(Bundle savedInstanceState) 当Activity第一次被实例化的时候系统会调用,整个生命周期只调用1次这个方法。...()方法建立,以调用Context.unbindService()关闭 service重要的生命周期方法 当用户调用startService ()或bindService()时,Service第一次被实例化的时候系统会调用
onPause 当系统开始准备停止当前Activity的时候调用,在该方法中google给出的建议是存储一些变化的数据同时停止一些类似于动画等消耗CPU的工作。...查看google文档可以发现,这个参数只有当Activity重新初始化的时候才不会为null。 那么什么叫重新初始化呢?...Activity的启动模式 Android应用程序都是由一个或多个Activity组成的,而Android内部则是通过栈来对Activity进行管理的。所谓栈就是一个先进后出的数据结构。...比如说应用程序A想调用singleInstance模式下的ActivityA,而应用程序B也同样调用了,那么在应用程序A和B中就会各有一个ActivityA的实例。...但如果该ActivityA是singleInstance模式的话,那么无论有多少个应用程序调用它,它都只可能在系统中存在一个实例同时该实例还是位于它自己的一个单独的任务栈中。
如果应用程序通过bindService()方法来启动Service,Service的生命周期如上图右半部分所示。...多个客户端能绑定到同一个Service,并且当他们都解除绑定时,系统将销毁Service(Service不需要被停止) 特别说明:当Activity调用bindService()绑定一个已通过startService...()方法取消与该Service的绑定时,也只是切断该Activity与Service之间的关联,并不能停止该Service组件。...2. client可以通过 IBinder接口获取 Service实例,从而实现在 client端直接调用 Service中的方法以实现灵活交互,这在通过 startService()方法启动中是无法实现的...在 onServiceConnected()方法中,我们又通过 向下转型 得到了 MyBinder的实例,有了这个实例, Activity和 Service之间的关系就变得非常紧密了。
1.Launcher请求ActivityManageService 在 Android系统启动流程(四)Launcher启动过程与系统启动流程这篇文章我讲过Launcher启动后会将已安装应用程序的快捷图标显示到界面上...3.ActivityThread启动Activity Android应用程序进程启动过程(前篇)这篇文章中提到过ActivityThread,在应用程序进程启动时会创建ActivityThread实例。...应用程序进程要启动Activity时需要将该Activity所属的APK加载进来,而LoadedApk就是用来描述已加载的APK文件。...如果该Activity为null则会通知ActivityManager停止启动Activity。...注释4处根据ComponentName中存储的Activity类名,用类加载器来创建该Activity的实例。
停止状态 当一个 Activity 不再处于栈顶位置,而且完全看不到的时候,就进入了停止状态了。...onCreate() 会在 Activity 第一次被创建的时候调用,应该在这个方法中完成 Activity 的初始化操作,比如加载布局、绑定事件等等。...可见生存期:Activity 在 onStart 和 onStop 之间所经历的,就是可见生存期。在可见生存期,Activity 对于用户总是可见的,但是可能无法和用户交互。...因为,我们每个应用程序都有自己的返回栈,虽然是同样这个 Activity,但是在不同的返回栈入栈的时候肯定是创建了新的实例了。...模式有任何影响 即使我们给这两种模式设置了 activity android:name=".ActivityStandard" android:launchMode="standard" android
一个应用程序通常由多个activities组成,他们通常是松耦合关系,通常一个应用程序包含有一个主Activity,即点击桌面图标的时候首先进入的Activity。...启动 Activity是通过Intent用来在应用程序的Activity间启动、停止和传输。...在这个方法中做一些初始化工作,比如调用setContentView去加载界面布局,初始化Activity所需要的数据等。后续调用onStart()。...在开发过程中需要跳转到原来已经开启的 Activity 实例,此时我们希望这个 Activity 可以被重用而不是再重新创建一个新的 Activity 实例,但根据 Android 系统的默认行为,每次都会为我们创建一个新的...Activity实例置于栈顶,原先处于该实例顶部的Activity实例会被出栈销毁。
一个应用程序通常由多个activities组成,他们通常是松耦合关系,通常一个应用程序包含有一个主Activity,即点击桌面图标的时候首先进入的Activity。...启动 Activity是通过Intent用来在应用程序的Activity间启动、停止和传输。...在这个方法中做一些初始化工作,比如调用setContentView去加载界面布局,初始化Activity所需要的数据等。后续调用onStart()。...在开发过程中需要跳转到原来已经开启的 Activity 实例,此时我们希望这个 Activity 可以被重用而不是再重新创建一个新的 Activity 实例,但根据 Android 系统的默认行为,每次都会为我们创建一个新的...Intent.FLAG_ACTIVITY_NO_HISTORY //方式无法指定 SingleInstance 模式,SingleInstances 只能在 AndroidManifest.xml 中声明
服务可由其他应用组件启动(如Activity),服务一旦被启动将在后台一直运行,即使启动服务的组件(Activity)已销毁也不受影响,除非系统必须回收内存资源,否则系统不会停止或销毁Service。...已启动的服务通常是执行单一操作,而且不会将结果返回给调用方。例如,它可能通过网络下载或上传文件。操作完成后,服务会自行停止运行。...” enabled 设置是否可以由系统来实例化服务。...通常,应用程序的所有组件都运行在应用程序创建的默认进程中,它与应用程序包名具有相同的名称。...元素的process属性可以为所有组件设置不同的默认值,但组件可以使用自己的进程属性覆盖默认值,从而允许跨多个进程扩展应用程序 4.3启动和停止Service 通过将 Intent
是无法控制其应用程序处于某一个状态的,这些均由系统来完成。 ...一个应用程序的优先级是受最高优先级的Activity影响的。当决定某个应用程序是否要终结去释放资源,Android内存管理使用栈来决定基于Activity的应用程序的优先级。...当一个Activity变为完全隐藏,它将会变成停止。 停止:当一个Activity不是可视的,它“停止”了。这个Activity将仍然在内存中保存它所有的状态和会员信息。...activity的四种加载模式 在android的多activity开发中,activity之间的跳转可能需要有多种方式,有时是普通的生成一个新实例,有时希望跳转到原来某个activity实例,而不是生成大量的重复的...是否允许多个实例 “standard”和”singleTop”可以被实例化多次,并且是可以存在于不同的task中;这种实例化时一个task可以包括一个activity的多个实例; “singleTask
(停止:即包所在的进程已经退出) FLAG_EXCLUDE_STOPPED_PACKAGES:不包含已经停止的包 主要原因如下: 自Android3.1开始,系统本身则增加了对所有app当前是否处于运行状态的跟踪...当然,即使系统给所有的广播一开始都默认了FLAG值为:FLAG_EXCLUDE_STOPPED_PACKAGES (不发送给已经停止的应用程序的广播接收器) 导致已经退出的应用程序无法接收到系统广播 ...onReceive(Context context, Intent intent) { 5 //这里写接收到广播后执行的操作 6 } 7 } (2.2)、实例化这个对象...当此Activity实例化时,会动态将RootReciver注册到系统中。当此Activity销毁时,动态注册的MyBroadcastReceiver将不再接收到相应的广播。...); 20 21 //实例化自定义广播接收器对象 22 receiver = new MyReceiver(); 23 //动态注册广播接收器
领取专属 10元无门槛券
手把手带您无忧上云