因此,不管是从桌面进入应用主界面,还是在应用里进入一个新的Activity,最终都会调用Activity$startActivity方法。...2. singleTop 如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。...Activity供多种方式调用启动的情况,多个调用希望只有一个Activity的实例存在,这就需要Activity的onNewIntent(Intent intent)方法了。...onNewIntent()非常好用,Activity第一启动的时候执行onCreate()—- onStart()—- onResume()等后续生命周期函数,也就时说第一次启动Activity并不会执行到...如果android系统由于内存不足把已存在Activity释放掉了,那么再次调用的时候会重新启动Activity即执行onCreate()—- onStart()—- onResume()等。
standard,默认模式,每次启动都会新建一个Activity实例,并进入当前任务栈 singleTop,如果要启动的Activity在栈顶存在实例,则不会重新创建Activity,而是直接使用栈顶的...Activity实例,并回调onNewIntent方法。...singleTask,如果要启动的Activity在栈中存在实例,则不会重新创建Activity,而是直接使用栈里的Activity实例,并回调onNewIntent方法。...方法。...→(B)onCreate→(B)onStart→(B)onResume→(A)onStop B→C的过程同上 C→B的过程,由于B启动模式为singleTask,所以B会调用onNewIntent,并且将
Activity的新实例,则系统会调用原有实例的onNewIntent()方法来处理此intent....6.启动模式的实际应用场景 7.快速启动一个 Activity 这个问题其实也是比较简单的,就是不要在 Activity 的 onCreate 方法中执行过多繁重的操作,并且在 onPasue...当在 A 里面激活 B 组件的时候, A 会调用 onPause() 方法,然后 B 调用 onCreate() , onStart() , onResume() 。...这个时候 B 覆盖了窗体, A 会调用 onStop() 方法. 如果 B 是个透明的,或者 是对话框的样式, 就不会调用 A 的 onStop() 方法。...3.再次进入外卖 App,可以发现支付宝成功页面已经消失。
返回值:该方法的返回值机理与键盘响应事件的相同,同样是当已经完整地处理了该事件且不希望其他回调方法再次处理时返回true,否则返回false。...Activity第一启动的时候执行onCreate()---->onStart()---->onResume()等后续生命周期函数,也就时说第一次启动Activity并不会执行到onNewIntent(...如果android系统由于内存不足把已存在Activity释放掉了,那么再次调用的时候会重新启动Activity即执行onCreate()---->onStart()---->onResume()等。...onRestoreInstanceState调用时机,activity A“确实”被系统销毁了,而如果仅仅是停留在有这种可能性的情况下,则该方法不会被调用。...另外,onRestoreInstanceState的bundle参数也会传递到onCreate方法中,也可以选择在onCreate方法中做数据还原。
上面的意思是说我们在非Activity context中调用 startActivity(),必须申明 FLAG_ACTIVITY_NEW_TASK 标记 这是什么意思呢,我们 Ctrl + 左键 进入...()方法中,此方法只能在Activity被创建时调用,这里因为 singleTop 启动模式并没有重新创建Activity,我们将7个生命周期回调方法都打上Log,发现当不创建新Activity对象的前提下调用...startActivity() 方法,声明周期函数只会先执行 onPause() 再执行 onResume ,所有我们将 onCreate() 中的显示代码移动到 onResume() 中来,再次测试...然后是说:当已经有此 Activity 实例存在栈顶时,上面两种情况都会导致 onNewIntent() 方法被调用。 下面两个段落是说: 1....Activity 将总是被 paused 之后才去接收一个新的intent,所以你可以等此方法(onNewIntent)被调用完毕时,在 onResume() 方法中去写自己的代码。
所有继承该父类的activity都要调用一个父类的onCreate方法。...都是启动新的实例,和原来启动的没关系,所以不会调用原来ActivityA的onNewIntent方法 当ActivityA的LaunchMode为SingleTop时: 如果ActivityA在栈顶,且现在要再启动...ActivityA,这时会调用onNewIntent()方法 ,生命周期顺序为: onCreate--->onStart--->onResume---onPause>onNewIntent--->onResume...onNewIntent 方法。...这里有个解决方法就是在 onCreate 和 onNewIntent 方法中调用同一个处理数据的方法, 总结:在activityA中设置了对应的启动模式后,其他(自己也行)activityB往A中使用intent
image.png Activity生命周期 image.png 接口函数 介绍 onCreate 当Activity第一次创建的时候调用。...这里需要提到的一点是,即使一个Activity被销毁后app内部的static变量是不会被销毁的,因为static变量是全局的,activity销毁但是该app的进程并没有被杀死。...Activity的时候打印这个参数会发先它是为null的。...就会在onPause之后调用到onSaveInstanceState(Bundle)方法,此时我们就可以往Bundle里存储一些数据,随后系统会杀死Activity然后再重启它,此时我们发现onCreate...singleTop模式 简单来说,启动的Activity已经在任务栈的栈顶话,那么再启动这个Activity的时候就不会创建该实例,同时会调用该Acitivity的onNewIntent方法(前面有提过该方法
位于栈顶;由于步骤2的设置,所以不会新建MainActivity而是重用栈顶的实例&调用实onNewIntent() // 传入自己设置的退出App标识...优点 应用场景广泛:兼顾单 / 多任务栈 & 多启动模式的情况 缺点 需要 Activity 经历正常的生命周期,即创建时调用onCreate(),结束时调用onDestroy() 因为只有这样经历正常的生命周期才能将...特别注意 假设场景:当前 Activity ≠ 当前任务栈最后1个Activity时,调用上述两个方法会出现什么情况呢?...再次重新开启进程 & 启动 Activity1 、 Activity2 ? 即在Android 中,调用上述Dalvik VM本地方法结果是: 1....) 注: 与 “在最后一个Activity调用 finish()”的区别:finish()不会结束进程,而上述两个方法会 至此,关于 一键退出App 的两个步骤讲解完毕。
位于栈顶;由于步骤2的设置,所以不会新建MainActivity而是重用栈顶的实例&调用实onNewIntent() // 传入自己设置的退出App标识...onCreate(),结束时调用onDestroy() 因为只有这样经历正常的生命周期才能将 Activity正确写入 & 写出 容器内 应用场景 任意情况下的一键退出 App 实现 方法2:RxBus...特别注意 假设场景:当前 Activity ≠ 当前任务栈最后1个Activity时,调用上述两个方法会出现什么情况呢?...(即Activity1 - Activity2 -Activity3(在Activity3调用上述两个方法)) 答: 结束Activity3(当前 Activity )& 结束进程 再次重新开启进程 &...) 注: 与 “在最后一个Activity调用 finish()”的区别:finish()不会结束进程,而上述两个方法会 至此,关于 **一键退出App ** 的两个步骤讲解完毕。
一、生命周期 onCreate():启动Activity时,首次创建Activity时回调。 onRestart():再次启动Activity时回调。...onStart():首次启动Activity时在onCreate()之后被回调,再次启动时在onRestart()之后被回调。此时Activity已经可见但还没出现到前台不能与用户交互。...以singleTop模式启动的Activity如果已经有一个示例存在==栈顶==,那么再启动这个Activity时就会重用这个示例,并调用onNewIntent()方法。...如果栈中已经存在该实例了,系统会销毁在其之上的所有Activity,最终让该Activity实例置于栈顶,并回调onNewIntent()方法。 singleInstance:单实例模式。...当再次启动该Activity实例时,会重用已存在的任务和实例(并调用onNewIntent)。而该Activity启动的其他Activity会自动运行与另一个任务栈中。
但singleTask启动的的ActivityA不存在时,会重新创建ActivityA,调用方式OnCreate->OnStart->OnResume 2.如果singletop启动的ActivityB...在栈底时,在栈顶startActivity到这个ActivityB时会重新调动 onCreate->onStart->onResume,但不会调用OnDestroy 并且singletop启动的的...ActivityB不存在时,会重新创建ActivityB,调用方式OnCreate->OnStart->OnResume 3.singleTask在栈底时,从栈顶startActivity到栈底ActivityA..., 而且再次进入了HomeActivity,并且这个HomeActivity调用了OnNewIntent,却没掉用OnCreate,所以来说他一直存在这,但你需要再次过渡才能找到它。 ...(对于追求捕获Home键让app退出的读者是一个喜讯,这样可以做到每次Home之后都能再次进入登录界面),在这个过程中没有直接进入HomeActivity,而是WelcomeActivity(有人说不对么
位于栈顶;由于步骤2的设置,所以不会新建MainActivity而是重用栈顶的实例&调用实onNewIntent() // 传入自己设置的退出App标识...需要 Activity 经历正常的生命周期,即创建时调用onCreate(),结束时调用onDestroy() 因为只有这样经历正常的生命周期才能将 Activity正确写入 & 写出 容器内 应用场景...特别注意 假设场景:当前 Activity ≠ 当前任务栈最后1个Activity时,调用上述两个方法会出现什么情况呢?...(即Activity1 - Activity2 -Activity3(在Activity3调用上述两个方法)) 答: 结束Activity3(当前 Activity )& 结束进程 再次重新开启进程...) 注: 与 “在最后一个Activity调用 finish()”的区别:finish()不会结束进程,而上述两个方法会 至此,关于一键退出App 的两个步骤讲解完毕。
只会调用onPause(),而不会调用onStop方法,开屏后则调用onResume() 1.1.1 两个活动间跳转 Activity A 启动另一个Activity B,回调如下: Activity...但如果 activity 的实例已存在于单独的任务中,则调用其 onNewIntent() 方法,其上面的实例会被移除栈。...即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。 1.2.3 singleTask 只有一个实例。...在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法...,注意是代表而不是说它就是一个Thread类 它是创建完新进程之后(肯定是在一个线程中啊),main函数被加载,然后执行一个loop的循环使当前线程进入消息循环,并且作为主线程。
onCreate() Activity第-次被创建的时候调用,一些初始化操作可以在这里完成。 onStart() 这个方法在Activity 由不可见变为可见的时候调用。...锁屏时只会调用onPause(),而不会调用onStop方法,开屏后则调用onResume()。 横竖屏切换时的生命周期?...虽然我们设置 Activity 的布局一般都是在 onCreate 方法里调用 setContentView 。...onNewIntent是什么时候调用的?...如果需要启动的实例是之前有打开过的,并且在栈的顶部,目前处于onPause、onStop 的状态,其他实例再次进入的话,执行顺序为:onNewIntent,onRestart,onStart,onResume
finish()方法后,回调如下:onDestory()(以在onCreate()方法中调用为例,不同方法中回调不同,通常都是在onCreate()方法中调用) 下面来看一下特殊情况下的生命周期 ①横竖屏切换...onRestoreInstanceState和onCreate方法。...并回调如下方法: @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); } 由于不会重建一个...Activity实例,则不会回调其他生命周期方法。...重用并让该Activity实例处在栈顶,然后调用onNewIntent()方法。
singleTop:栈顶复用模式 栈顶复用模式,这种模式下,如果新的Activity已经位于任务栈顶,那么此Activity不会被重新创建,同时它的onNewIntent方法会被回调,通过此方法的参数我们可以取出当前请求的信息...需要注意的是,这个Activity的onCreate,onStart不会被系统调用,因为它并没有发生改变。...如果存在A所需的任务栈,这时要看A是否在栈中有实例存在,如果有实例存在,那么系统就会把A调到栈顶并调用它的onNewIntent方法,如果实例不存在,就创建A的实例并把A压入栈中: 例如:1)比如目前任务栈...,系统会把D切换到栈顶并调用其onNewIntent方法,同时由于singleTask默认具有clearTop的效果,会导致栈内所有在D上面的Activity全部出栈,于是最终S1中的情况为AD。...这个标记位一般会和singTask启动模式一起出现,在这种情况下,被启动Activity的实例如果已经存在,那么系统就会调用它的onNewIntent。
因此,虽然焦点更改通常与生命周期更改有某种关系(停止的活动通常不会获得窗口焦点),但您不应依赖此处回调与其他生命周期方法(如onResume()中的回调)之间的特定顺序。...从Android Q开始,在多窗口模式下,可以同时有多个恢复的活动,因此即使上面没有覆盖,恢复状态也不能保证窗口焦点。...(2)生命周期方法简析 onCreate (Bundle savedInstanceState):活动创建时调用一次,用于初始化当前活动数据和绑定页面的组件等。...onStart ():在活动创建方法onCreate(Bundle)或重新启动方法onRestart()之后调用,开始绘制视图、动画等,呈现给用户,其后一般调用onResume()。...如果根据第二点添加获取焦点方法后,由下图可以看到继续执行的unity脚本生命周期方法,先获取到焦点、中止pause状态并绘制页面进行正常显示。即工程重新获取焦点后才会绘制图像。
生命周期:若情况一中栈顶的 Activity 被直接复用时,它的 onCreate 、onStart 不会被系统调用,由于它并没有发生改变。...可是一个新的方法 onNewIntent 会被回调( Activity 被正常创建时不会回调此方法)。...方法将不会再次运行。...再次跳转页面到 CourseDetailActivity 时会直接复用原有的 Activity ,并且此页面须要展示的数据是从 getIntent() 方法得来,可是 initData() 方法不会再次被调用...这个时候 B 覆盖了窗体, A 会调用 onStop() 方法. 如果 B 是个透明的,或者 是对话框的样式, 就不会调用 A 的 onStop() 方法。
,用来布局,以及更新headers,在PreferenceActivity的oncreate()方法中被调用,以及onGetInitialHeader()方法,也是在PreferenceActivity...的oncreate方法中被调用 @Override public void onBuildHeaders(List headers) { if (!...:activity启动模式为singletask单任务模式,如果在战中存在activity的实例,当再次通过intent调起时不会再去oncreate创建实例,而是onNewIntent去重用该实例...@Override public void onNewIntent(Intent intent) { super.onNewIntent(intent);...比如可以创建蓝牙快捷方式,以及状态栏进入蓝牙时需要借助这些内部类来加载那些fragment。
再次启动App时,会执行onCreate()->onStart()->onResume() HOME键: 当我们打开应用程序时,比如浏览器,我正在浏览NBA新闻,看到一半时,我突然想听歌,这时候我们会选择按...而当我们从桌面再次启动应用程序时,则先后分别执行了onRestart()->onStart()->onResume()三个方法。...如果Activity启动顺序为A->B->B->A->D,栈中的Acitivy为ABAD(当B位于栈顶时,再次启动B的时候,B不会重新创建) 3....SingleInstance的一个任务栈中只有一个Activity,并保证不再有其他Activity实例进入。...注意:调用finish()使该activity销毁时不会调用该函数 FLAG_ACTIVITY_NO_HISTORY 意思就是说用这个FLAG启动的Activity,一旦退出,它不会存在于栈中,比如原来是
领取专属 10元无门槛券
手把手带您无忧上云