Android活动的生命周期与启动模式
- 格式:pptx
- 大小:213.50 KB
- 文档页数:8
android lifecycle 用法-回复Android生命周期的用法一. 简介Android生命周期是指一个Android应用程序在运行过程中各个组件的状态变化顺序。
了解和掌握Android生命周期是开发Android应用程序的基本功之一。
在本文中,我们将一步一步回答关于Android生命周期的用法。
二. 活动(Activity)的生命周期1. onCreate() - 这个方法是在活动被创建时调用的。
在这个方法中,我们可以完成一些初始化工作,比如设置布局、绑定控件,以及一些其他必要的准备工作。
2. onStart() - 这个方法是在活动即将变为可见状态时调用的。
在这个方法中,我们可以做一些准备工作,比如加载数据、注册监听器。
3. onResume() - 这个方法是在活动进入前台并可见时调用的。
这是活动与用户进行交互的时刻,我们可以在此方法中处理用户输入、更新UI等操作。
4. onPause() - 这个方法是在活动失去前台焦点但仍可见时调用的。
在这个方法中,我们应该暂停正在进行的操作,比如暂停动画、停止网络请求等。
5. onStop() - 这个方法是在活动即将进入后台不可见状态时调用的。
在这个方法中,我们可以释放资源、保存数据等操作,以便在恢复时能够正常运行。
6. onRestart() - 这个方法是在活动从停止状态重新启动时调用的。
我们可以在这个方法中做一些重新初始化的工作。
7. onDestroy() - 这个方法是在活动被销毁时调用的。
在这个方法中,我们应该释放所有的资源,比如关闭数据库连接、注销广播接收器等。
三. 片段(Fragment)的生命周期1. onAttach() - 这个方法是在片段与活动关联时调用的。
在这个方法中,我们可以获取到与该片段关联的活动的引用,以便进行交互操作。
2. onCreate() - 这个方法是在片段被创建时调用的。
在这个方法中,我们可以进行一些初始化工作,比如设置布局、绑定控件等。
Android开发中Activity的⽣命周期及加载模式详解本⽂给⼤家介绍Activity的⽣命周期,如果⼤家学习过iOS的⼩伙伴的话,Activity的⽣命周期和iOS中ViewController的⽣命周期⾮常类似。
⽣命周期,并不难理解。
⼀个⼈的⽣命周期莫过于⽣⽼病死,花⼉的⽣命周期就是花开花谢了。
在Android中Activity的⽣命周期莫过于Activity的创建到消亡的过程了。
本篇博客就会介绍Activity⽣命周期中的不同阶段,通过实例的形式来窥探⼀下Activity的⽣命周期。
搞明⽩Activity的⽣命周期是⾄关重要的,因为只有搞明⽩每个⽣命周期的每个阶段,你才能在不同段做不同的事情。
接下来我们将通过⼀个实例来介绍Activity的⽣命周期,在这个Demo中会有⼀个MainActivity, MainActivity就是App启动后第⼀个显⽰的Activity。
在MainActivity上有⼀个按钮,点击这个按钮就会跳转到SecondActivity,点击返回键就会从SecondActivity中返回到MainActivity中,再点击返回键就会退出App。
通过这⼀些列的Activity的切换,我们将通过打印Log的⽅式来进⾏观察Activity的⽣命周期。
⼀.代码编写其实这篇博客的代码是⾮常简单的,就是重写Activity⽣命周期不同阶段的⽅法,然后在⽅法中进⾏Log的打印,从⽽来标记这个⽣命周期的阶段。
⽽Demo的UI也是灰常的简单的,所以Activity的layout⽂件就不做过多的赘述了。
接下来看⼀下两个Activity中的关键代码。
1.下⽅的代码是MainActivity中的关键代码,对Activity⽣命周期的不同阶段进⾏重写,然后打印⽇志,标记出是哪个Activity中的哪个⽅法。
在onCreate()⽅法中通过id获取Button, 然后给按钮绑定上单击事件,点击button时跳转到SecondActivity中。
activity生命周期有几种状态
Activity生命周期有五种状态,分别是:
1.启动状态:当Activity启动后,会进入此状态,但此状态很短暂,会很快进入运行状态。
2.运行状态:Activity处于屏幕的最前端,它是可见的、有焦点的,并可以与用户进行交互,如单击、长按等事件。
此时,Activity 处于活动或运行状态。
3.暂停状态:在某些情况下,如Activity上覆盖了一个透明或非全屏的Activity,被覆盖的Activity仍然对用户可见,但无法获取焦点,此时它处于暂停状态。
暂停的Activity仍然是存活状态,保留着所有的状态和成员信息,并保持和窗口管理器的连接,但当系统内存不足时,它可能会被系统杀死。
4.停止状态:当Activity完全不可见时,如被另一个Activity 遮挡,它就处于停止状态。
此时,Activity仍然保留着当前的状态和成员信息,但由于对用户不可见,如果系统内存不足,这个Activity 很容易被系统杀死。
5.销毁状态:当Activity处于销毁状态时,意味着它将被清理出内存。
请注意,Activity生命周期指的是一个Activity从创建到销毁的全过程,包括上述的五种状态。
在Android开发中,理解和掌握Activity的生命周期对于内存管理和用户体验都至关重要。
AndroidService启动⽅式,⽣命周期和应⽤场景详解Android Service 启动⽅式,⽣命周期和应⽤场景详解备注: Android Service 启动⽅式,⽣命周期和应⽤场景详解: ContentProvider1进程⼀代码: ContentProvider1进程⼆代码: iOS APP打包上传审核和客服咨询流程(审核被拒,账号问题等):startService 和 bindService 区别: startService 特点:⼀旦服务开启跟调⽤者(开启者)就没有任何关系了。
开启者退出了,开启者挂了,服务还在后台长期的运⾏。
开启者不能调⽤服务⾥⾯的⽅法。
bindService 特点:bind的⽅式开启服务,绑定服务,调⽤者挂了,服务也会跟着挂掉。
绑定者可以调⽤服务⾥⾯的⽅法。
(说⽩了就和⼩程序⼀样,打开的时候使⽤,⽤完了就关闭拍屁股⾛⼈,⼀次性滴)注意:绑定服务不会调⽤onstart()或者onstartcommand()⽅法⼀,Service 含义:Service分为本地服务(LocalService)和远程服务(RemoteService): 1、本地服务依附在主进程上⽽不是独⽴的进程,这样在⼀定程度上节约了资源,另外Local服务因为是在同⼀进程因此不需要IPC,也不需要AIDL。
相应bindService会⽅便很多。
主进程被Kill后,服务便会终⽌。
2、远程服务为独⽴的进程,对应进程名格式为所在包名加上你指定的android:process字符串。
由于是独⽴的进程,因此在Activity所在进程被Kill的时候,该服务依然在运⾏,不受其他进程影响,有利于为多个进程提供服务具有较⾼的灵活性。
该服务是独⽴的进程,会占⽤⼀定资源,并且使⽤AIDL进⾏IPC稍微⿇烦⼀点。
Service启动⽅式(主要是1,2两种): 1、startService 启动的服务:主要⽤于启动⼀个服务执⾏后台任务,不进⾏通信。
android中级知识点一、Activity的生命周期:1. onCreate():Activity被创建时调用,可以进行一些初始化操作。
2. onStart():Activity可见时调用。
3. onResume():Activity可见且可以与用户进行交互时调用。
4. onPause():Activity即将失去焦点但仍可见时调用,常用于保存数据或停止一些耗时操作。
5. onStop():Activity不再可见时调用,常用于释放一些资源。
6. onRestart():Activity重新启动时调用。
7. onDestroy():Activity被销毁时调用,常用于释放一些资源和取消注册。
二、Fragment的使用:1. Fragment是Activity内部的页面组件,可以包含在一个Activity中,并拥有自己的生命周期。
2. Fragment管理自己的视图和用户交互,可以在Activity运行过程中进行动态的添加、移除、替换等操作。
3. Fragment可以通过FragmentManager来进行管理,FragmentManager负责管理Fragment的添加、移除、替换等操作。
4. 在布局文件中使用<fragment>标签可以直接在布局中添加Fragment。
三、UI布局1. XML布局文件:Android使用XML文件定义UI布局,可以使用LinearLayout、RelativeLayout、FrameLayout等布局管理器来进行页面布局。
2. View控件:Android提供了各种各样的View控件,如TextView、Button、ImageView等,通过在布局文件中添加这些控件来构建UI界面。
3. 布局管理器:Android提供了各种布局管理器来帮助控制View的位置和大小,如LinearLayout、RelativeLayout、FrameLayout等。
AndroidActivity的⽣命周期与启动模式全⾯解读⽬录Activity概述Activity⽣命周期⽣命周期的调⽤顺序演⽰Activity的启动模式启动模式的设置standard(默认standard)singleTopsingleTasksingleInstanceActivity概述• Activity(活动)是Android应⽤程序中最基本的组成单位。
• Activity主要负责创建显⽰窗⼝,⼀个Activity对象通常就代表了⼀个单独的屏幕。
• Activity是⽤户唯⼀可以看得到的组件,⽤来与⽤户进⾏交互的。
• Activity是通过⼀个Activity栈来进⾏管理,当前显⽰的Activity被放到栈顶。
Activity⽣命周期⽣命周期的调⽤顺序⼀、启动activity,然后按返回键退出。
onCreate()->onStart()->onResume()onPause()->onStop()->onDestory()⼆、启动activity,按Home键显⽰桌⾯,再点程序图标进⼊应⽤程序。
onCreate()->onStart()->onResume()onPause()->onStop()onRestart()->onStart()->onResume()三、启动activityA,再启动activityBAonCreate()->AonStart()->AonResume()AonPause()BonCreate()->BonStart()->BonResume()演⽰package com.qingsu.yingguday06;import androidx.appcompat.app.AppCompatActivity;import ponentName;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button mBtIntent,mBtIntentOne,mBtIntentTwo,mBtIntentThree;@Overrideprotected void onCreate(Bundle savedInstanceState) {Log.d("TAG","onCreate");super.onCreate(savedInstanceState);setContentView(yout.activity_main);initView();mBtIntent.setOnClickListener(this);}private void initView(){mBtIntent = findViewById(R.id.bt_intentmain);}@Overrideprotected void onStart() {Log.d("TAG","onStart");super.onStart();}@Overrideprotected void onResume() {Log.d("TAG","onResume");super.onResume();}@Overrideprotected void onPause() {Log.d("TAG","onPause");super.onPause();}@Overrideprotected void onStop() {Log.d("TAG","onStop");super.onStop();}@Overrideprotected void onRestart() {Log.d("TAG","onRestart");super.onRestart();}@Overrideprotected void onDestroy() {Log.d("TAG","onDestroy");super.onDestroy();}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.bt_intentmain:startActivity(intent);;break;default:break;}}}package com.qingsu.yingguday06;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;public class HomeActivity extends AppCompatActivity {Button mBtHome,mBtIntentB;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.d("TAG","BonCreate");setContentView(yout.activity_home);setTitle("页⾯B");mBtHome = findViewById(R.id.bt_intenthome);mBtIntentB = findViewById(R.id.bt_intentB);mBtHome.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(HomeActivity.this,MainActivity.class); startActivity(intent);}});mBtIntentB.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(HomeActivity.this,HomeActivity.class); startActivity(intent);}});}@Overrideprotected void onStart() {Log.d("TAG","BonStart");super.onStart();}@Overrideprotected void onResume() {Log.d("TAG","BonResume");super.onResume();}@Overrideprotected void onPause() {Log.d("TAG","BonPause");super.onPause();}@Overrideprotected void onStop() {Log.d("TAG","BonStop");super.onStop();}@Overrideprotected void onRestart() {Log.d("TAG","BonRestart");super.onRestart();}@Overrideprotected void onDestroy() {Log.d("TAG","onDestroy");super.onDestroy();}}Activity的启动模式standard(默认standard)、singleTop、singleTask、singleInstance 启动模式的设置清单⽂件中在活动声明中加⼊launchMode属性默认为standard⽅式 android:launchMode="singleTask"<activity android:name=".MainActivity"android:launchMode="singleTask"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="UNCHER" /></intent-filter></activity>standard(默认standard)⼀直⼊栈⼀直创建新的ActivitysingleTop当前页⾯中创建当前页⾯不会新创建ActivitysingleTask当Activity存在则会将其置顶,Activity上⾯的栈则会被弹出!即Activity上⾯的Activity会销毁!singleInstance每⼀个Activity都是唯⼀的当Activity存在不会新建新的Activity到此这篇关于Android Activity的⽣命周期与启动模式全⾯解读的⽂章就介绍到这了,更多相关Android Activity 启动模式内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
浅谈Android的Activity运行流程(生命周期)关于Android的Activity运行流程,我们可以写一些程序来直观的查看Activity的运行流程。
在这里我们使用Log工具来获取Activity运行日志。
假如我们新建一个Android项目,ProcessActivity.java代码如下:public class ProcessActivity extends Activity {private static final String tag="徐守威";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//setContentView(yout.main);Log.v(tag, "onCreate...");}@Overrideprotected void onRestart() {// TODO Auto-generated method stubsuper.onRestart();Log.v(tag, "onRestart...");}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();Log.v(tag, "onStart...");}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();Log.v(tag, "onResume...");}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();Log.v(tag, "onPause...");}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();Log.v(tag, "onStop...");}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.v(tag, "onDestroy...");}}我们为Activity的哥哥状态添加了“Log”记录消息。
Android应用程序的运行原理1. 概述Android应用程序的运行原理是指Android操作系统中应用程序是如何被加载、启动和执行的过程。
理解Android应用程序的运行原理对于开发高质量的应用程序以及解决性能问题至关重要。
2. Android应用程序的生命周期Android应用程序的生命周期可以分为以下几个阶段: - 创建(Creating):当应用程序被创建时,系统会调用应用程序的onCreate()方法。
在这个阶段,应用程序还没有可见的用户界面。
- 开始(Starting):应用程序从创建阶段转移到开始阶段时,系统会调用onStart()方法。
在这个阶段,应用程序已经可见,但用户不能与其进行交互。
- 恢复(Resuming):当应用程序从后台恢复到前台时,系统会调用onResume()方法。
在这个阶段,用户可以与应用程序进行交互。
- 暂停(Pausing):当用户离开应用程序或者有其他应用程序覆盖在其上时,应用程序会进入暂停阶段,系统会调用onPause()方法。
- 停止(Stopping):当应用程序完全不可见时,系统会调用onStop()方法。
- 销毁(Destroying):当用户关闭应用程序或者系统需要释放资源时,系统会调用onDestroy()方法。
3. Android应用程序的启动过程Android应用程序的启动过程可以分为以下几个步骤:- 应用程序的图标点击:当用户点击应用程序的图标时,系统会通过包管理器找到对应的应用程序,并启动它。
- 应用程序进程的创建:系统会为该应用程序创建一个新的进程,并为其分配资源。
- 应用程序的初始化:系统会调用应用程序的onCreate()方法,进行一些初始化工作,例如加载布局、注册事件监听器等。
- 启动主活动(MainActivity):系统会找到应用程序的主活动,并调用其onCreate()、onStart()和onResume()方法,最终将主活动显示在屏幕上。
Activity之生命周期和启动模式activity类处于android.app包中,继承体系如下:ng.Object↳a ndroid.content.Context↳a ndroid.content.ContextWrapper↳a ndroid.view.ContextThemeWrapper↳android.app.Activity在Android中,Activity的生命周期一直是比较重要的知识点,首先上官方图:七个周期函数,可以添加log观察周期函数的输出验证生命周期函数的调用时间:protected void onCreate(Bundle icicle);protected void onRestart();protected void onStart();protected void onResume();//常用来刷新显示数据protected void onPause();//常用来保存数据,如contentprider,sharedpreferprotected void onStop();protected void onDestroy();生命周期总结:1,在android 中,Activity 拥有四种基本状态:1. Active/Runing一个新Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。
2. Paused 当Activity 被另一个透明或者Dialog 样式的Activity 覆盖时的状态。
此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。
3. Stoped 当Activity 被另外一个Activity 覆盖、失去焦点并不可见时处于 Stoped状态。
4. Killed Activity 被系统杀死回收或者没有被启动时处于 Killed状态。
Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式一.序作为这本书的第一章,主席还是把Activity搬上来了,也确实,和Activity打交道的次数基本上是最多的,而且他的内容和知识点也是很多的,非常值得我们优先把他掌握,Activity 中文翻译过来就是”活动”的意思,但是主席觉得这样翻译有些生硬,直接翻译成“界面”可能更好,的确,Activity主要也是用于UI效果的呈现,不过两者翻译都不为过,我们知其意就行了,正常情况下,我们除了Window,Dialog,Toast,我们还能见到的就只有Activity 了,他需要setContentView()去绑定一个视图View作为效果的呈现,然而,作为一本高质量的进阶书。
肯定不会去围绕着入门知识讲解,本章的侧重点在于对Activity使用过程中搞不清楚的概念,生命周期和启动模式已经IntentFilter的匹配规则分析,毕竟Activity在异常状态下的生命周期是多样化的,至于Activity的启动模式和各种各样的Flags,更是让很多人摸不着头脑,还有隐式启动Activity中也有着复杂的Intent匹配过程,所以我们还是一步步的去学习下去,真正的了解Activity这个小家伙!二.Activity的生命周期全面分析Activity的生命周期,本章主要讲解两个方面典型情况下的生命周期异常情况下的生命周期典型情况是指用户参与的情况下,Activity所经过的生命周期的变化,异常情况下的话,就有多种可能了,比如系统回收或者由于当前设备的Configuration发生改变从而导致Activity被销毁重建,异常情况下的生命周期的关注点和典型情况下有些不同,所以要分开来描述才能描述的清楚些1.典型情况下的生命周期分析在正常的情况下,生命周期会经历以下的生命周期onCreate:表示Activity正在被创建,这是生命周期的第一个方法,在这个方法中,我们可以做一些初始化的工作,比如调用onContentView去加载界面布局资源,初始化Activity所需数据等onRestart:表示Activity正在重新启动,一般情况下,当当前Activity从不可见重新变为可见时,onRestart就会被调用,这总情况一般是用户行为所导致的,比如用户按home键切换到桌面或者用户打开了一个新的Activity,这时当前的Activity就会被暂停,也就是onPause 和onStop方法被执行了,接着用户又回到了这个Activity,就会出现这种情况onStart:表示Activity正在被启动,即将开始,这个时候Activity已经可见了,但是还没有出现在前台,还无法和用户交互,这个时候我们可以理解为Activity已经启动了,但是我们还没有看见onResume:表示Activity已经可见了,并且出现在前台,并开始活动了,要注意这个和onStart 的对比,这两个都表示Activity已经可见了,但是onStart的时候Activity还处于后台,onResume的时候Activity才显示到前台onPause:表示Activity正在停止,正常情况下,紧接着onStop就会被调用,在特殊情况下,如果这个时候再快速的回到当前Activity,那么onResume就会被调用,主席的理解是这个情况比较极端,用户操作很难重现这个场景,此时可以做一些数据存储,停止动画等工作,但是注意不要太耗时了,因为这样会影响到新的Activity的显示,onPause必须先执行完,新Activity的onResume才会执行onStop:表示Activity即将停止,同样可以做一些轻量级的资源回收,但是不要太耗时了onDestroy:表示Activity即将被销毁,这是Activity生命周期的最后一个回调,在这里我们可以做一些最后的回收工作和资源释放正常情况下,Activity的常用生命周期用官网的一张图就足够表示了这里附加几个说明1.针对一个特定的Activity,第一次启动,回调如下:onCreate ——> onStart ——> onResume2.当用户打开新的Activity或者切换到桌面的时候,回调如下:onPause ——> onStop ——> 这里有一种特殊的情况就是,如果新的Activity采取了透明的主题的话,那么当前Activity 不会回调onStop3.当用户再次回到原来的Activity,回调如下:onRestart ——> onStart ——> onResume4.d当用户按back键的时候回调如下:onPause ———> onStop ——> onDestroy5.当Activity被系统回收的时候再次打开,生命周期回调方法和1是一样的,但是你要注意一下就是只是生命周期一样,不代表所有的进程都是一样的,这个问题等下回详细分析6.从整个生命周期来说,onCreate和onDestroy是配套的,分别标示着Activity的创建和销毁,并且只可能有一次调用,从Activity是否可见来说,onStart和onStop是配套的,随着用户的操作和设备屏幕的点亮和熄灭,这两个方法可能被调用多次,从Activity是否在前台来说,onResume和onPause是配套的,随着用户操作或者设备的点亮和熄灭,这两个方法可能被多次调用这里提出两个问题1.onStart和onResume,onPause和onStop从描述上都差不多,对我们来说有什么实质性的不同呢?2.假设当前Activity为A,如果用户打开了一个新的Activity为B,那么B的onResume和A 的onPause谁先执行尼?我们先来回答第一个问题,从实际使用过程来说,onStart和onResume,onPause和onStop 看起来的确差不多,甚至我们可以只保留其中的一对,比如只保留onStart和onStop,既然如此,那为什么Android系统还会提供看起来重复的接口呢?根据上面的分析,我们知道,这两个配对的回调分别代表不同的意义,onStart和onStop是从Activity是否可见这个角度来回调的,除了这种区别,在实际的使用中,没有其他明显的区别第二个问题,我们就要从源码的角度来分析以及得到解释了,关于Activity的工作原理会在本书后续章节进行讲解,这里我们大致的了解即可,从Activity的启动过程来看,我们来看一下系统的源码,Activity启动过程的源码相当复杂,设计到了Instrumentation,Activit和ActivityManagerService(AMS),这里不详细分析这一过程,简单理解,启动Activity的请求会由 Instrumentation 来处理,然后他通过Binder向AMS发请求,AMS内部维护着一个ActivityStack,并负责栈内的Activity的状态同步,AMS通过ActivityThread去同步Activity的状态从而完成生命周期方法的调用,在ActivityStack中的resumeTopActivityLnnerLocked方法中,有这么这段代码//we need to start pausing the current activity so the top one can be resumedboolean dontWaitForPause = (.flags& ActivityInfo.FLAG_RESUME_WHILE_PAUSING)!=0;boolean pausing = mStackSupervisor.pauseBackStacks(userLeaving, KeyStore.TrustedCertificateEntry,dontWaitForPause);if(mResumedActivity != null){pausing != startPaUSINGlOCAKED(userLeaving,false,true,dontWaitForPause);if(DEBUG_STA TES){Slog.d(TAG,"resumeTopActivityLocked:pausing" + mResumedActivity);}}从上述的代码中我们可以看出,在新Activity启动之前,栈顶的Activity需要先onPause后,新的Activity才能启动,最终,在ActvityStackSupervisor中的realStartActivityLocked方法中,会调用如下代码app.thread.scheduleLaunchActivity(newIntent(r.intent),r.appToken,System.identityHashCode(r),,newConfiguration(mService.mConfiguration),pat,r.task.voiceInteractor,app.repProcState,r.icicle,r.persistentState,results,new Intents,!andResume,mService.isNextTransitionForward(),profilerInfo);我们都知道,在这个app.thread的类型是IApplicationThread的具体实现实在ActivityTread 中,所以,这段代码实际上遇到了ActivityThread当中,,即ApplicationThread的scheduleLaunchActivity方法,而scheduleLaunchActivity方法最终会完成生命周期的调用过程,因此可以得出结论,是旧Activity县onPause,然后新的Activityy再启动至于ApplicationThread的scheduleLaunchActivity方法为什么会完成新Activity的生命周期,请看接下来的代码,scheduleLaunchActivty为什么会完成新的Activtyprivate void handlerLaunchActivity(ActivityClientRecord r, Intent customIntent){//if we are getting ready to gc after going to the background,well we are back active so skip itunscheduleGcIdler();mSomeActivitiesChanged =true;if(r.profilerInfo != null){mProfiler.setProfiler(r.profilerInfo);mProfiler.startProfiling;}//Make sure we are running with the most recent confighandlerConfigurationChanged(null,null);if(localLOGV)Slog.vTAG,"Handling launch of"+r);//在这里新Activity被创建出来,其onCreate和onStart被调用Activity a = PerformLaunchActivity(r,customIntent);if(a != null){r.createdConfig = new Configuration(mConfiguration);Bundle oldState = r.start;handlerResumeActivity(r.token,false,r.isForward,!r.activity.mFinished && r.startsNotResumed);}//省略...}c从上面的分析可以看出,当新的Activity启动的时候,旧的Activity的onPause方法会先执行,然后才启动新的Activity,到底是不是这样尼?我们可以写一个小栗子来验证一下,如下是两个Activity的代码,在MainActivity中点击按钮可以跳转到SecondActivity,同时为了分析生命周期,我们把log日志也打出来MainActivitypackage com.liuguilin.activitysample;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;public class MainActivity extends AppCompatActivity {public static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);findViewById(R.id.btnTo).setOnClickListener(new View.OnClickListener() { @Overridepublic void onClick(View view) {startActivity(new Intent(MainActivity.this, SecondActivity.class));}});}@Overrideprotected void onPause() {super.onPause();Log.i(TAG, "onPause");}@Overrideprotected void onStop() {super.onStop();Log.i(TAG, "onStop");}}SecondActivitypackage com.liuguilin.activitysample;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;/*** Created by lgl on 16/8/24.*/public class SecondActivity extends AppCompatActivity {private static final String TAG = "SecondActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_second);Log.i(TAG, "onCreate");}@Overrideprotected void onStart() {super.onStart();Log.i(TAG, "onStart");}@Overrideprotected void onResume() {super.onResume();Log.i(TAG, "onResume");}}这样我们可以观察到他的生命周期通过这个生命周期我们可以观察到,旧的Activity的onPause先调用,然后新的Activity才启动,这也证实了我们上面的分析原理,也许有人问,你只是分析了Andorid5.0的源码,你怎么所有的版本源码逻辑都相同,的确,我们不能把所有的版本都概括,但是作为Android 的一个运行过程的基本逻辑,随着版本的更新并不会很大的改变,因为Android也需要兼容性,,不能说在同一个版本上运行有两种不同的逻辑,那根本不可能,关于这一点,我们要把握一个度,就是对于Android的基本运行机制,的不同,Android不能在onPause中做重量级的操作,因为必须在onPause执行完成以后新的Activity才能Resume,从这一点我们也间接性的证明了我们的结论,通过分析这个问题,我们知道onPause和onStop都不能做耗时的操作,尤其是onPause,这也意味着,我们应当尽量的在onStop中做操作,从而使新的Activity尽快显示出来并且换到前后台三.异常情况下的生命周期分析上一节我们分析的是正常事情下的生命周期,但是我们写程序也不要理想化,居多的问题就是出在异常情况下,我们知道,Activity除了受用户操作导致的正常生命周期的调度,同时还会存在一些异常的情况,比如当资源相关的系统配置发生改变以及系统内存不足的时候,Activity就有可能被杀死,下面我们具体来分析下这几种情况1.情况1:资源相关的系统配置发生改变导致Activity被杀死并重新创建理解这个问题,首先要对系统的资源加载有一定的了解,这里就不详细分析系统资源加载的机制了,但是我们简单说明一下,拿最简单的图片来说,当我们把一张图片挡在drawable 中的时候,就可以通过Resources去获取这张图片了,同时为了兼容不同的设备,我们可能还需要在其他一些目录下放置不同的图片,比如drawable-xhdpi之类的,当应用程序启动时,系统会根据当前设备的情况去加载合适的Resources资源,比如说横屏手机和竖屏手机会拿着两张不同的图片(设定了landscape或者portrait状态下的图片),比如之前Activity处于竖屏,我们突然旋转屏幕,由于系统配置发生了改变,在默认情况下,Activity会被销毁并且重新创建,当然我们也可以阻止系统重新创建我们的Activity默认情况下,如果我们的Activity不做特殊处理,那么当系统配置发生改变之后,Activity 就会销毁并且重新创建,可以看图当系统配置发生改变的时候,Activity会被销毁,其onPause,onStop,onDestroy均会被调用,同时由于Activity是异常情况下终止的,系统会调用onSaveInstanceState来保存当前Activity 的状态,这个方法调用的时机是在onStop之前,他和onPause没有既定的时序关系,他即可能在onPause之前调用,也有可能在之后调用,需要强调的是,这个方法只出现在Activity 被异常终止的情况下,正常情况下是不会走这个方法的吗,当我们onSaveInstanceState保存到Bundler对象作为参数传递给onRestoreInstanceState和onCreate方法,因此我们可以通过onRestoreInstanceState和onCreate方法来判断Activity是否被重建。