学向勤中得,萤窗万卷书。这篇文章主要讲述Android查缺补漏--Activity生命周期和启动模式相关的知识,希望能为你提供帮助。
一、生命周期
- onCreate():启动Activity时,首次创建Activity时回调。
- onRestart():再次启动Activity时回调。
- onStart():首次启动Activity时在onCreate()之后被回调,再次启动时在onRestart()之后被回调。此时Activity已经可见但还没出现到前台不能与用户交互。
- onResume():在onStart()之后被回调,此时Activity已经完全可见并且可以与用户交互。
- onPause():当用户返回或者跳转到下一个Activity时会回调此方法,表示正在停止当前Activity,但此时Activity依然可见,通常紧接着会回调onStop()。
- onStop():表示Activity即将停止。
- onDestroy():表示Activity被销毁。
- onStart和onResume咋看起来差不多,但有一些细微的差别,onStart表示Activity虽然此时已经可见但并没有完全显示到前台,onResume表示此时已经完全显示到前台了,并可以与用户交互了,onPause和onStop区别类似于此。
- 当ActivityA启动ActivityB时,他们的生命周期方法执行顺序如下:
A.onPause-> B.onCreate-> B.onStart-> B.onResume-> A.onStop
12-05 17:18:24.666 778-778/cn.codingblock.androidadvancestudy I/MainActivity: onPause:
12-05 17:18:24.674 778-778/cn.codingblock.androidadvancestudy I/BActivity: onCreate:
12-05 17:18:24.687 778-778/cn.codingblock.androidadvancestudy I/BActivity: onStart:
12-05 17:18:24.688 778-778/cn.codingblock.androidadvancestudy I/BActivity: onResume:
12-05 17:18:25.006 778-778/cn.codingblock.androidadvancestudy I/MainActivity: onStop:
1、普通情况下的Activity生命周期方法执行顺序:
- 启动一个Activity:onCreate()-> onStart()-> onResume();
- 当在当前Activity中跳转到下一个页面时(或者被用户切换到后台时),当前的Activity会被暂停:onPause()-> onStop();
- 然后再返回这个Activity时:onRestart()-> onStart()-> onResume();
- Activity退出时:onPause()-> onStop()-> onDestroy()。
- onPause()-> onSaveInstanceState()-> onStop()-> onDestroy()-> onCreate()-> onStart()-> onRestoreInstanceState()-> onResume()。
3、系统内存不足导致低优先级的Activity被回收时的生命周期方法执行顺序此种情况和第二种横竖屏切换时的情况查不多,也会执行onSaveInstanceState()和onRestoreInstanceState()。
二、四种启动模式
- standard:默认的启动方式,Activity可以被多次实例化,即同一个栈中可以存在多个Activity实例。
- singleTop:栈顶复用模式。以singleTop模式启动的Activity如果已经有一个示例存在==栈顶==,那么再启动这个Activity时就会重用这个示例,并调用onNewIntent()方法。如果不在栈顶,则会创建新的示例,效果如standard一致。
- singleTask:栈内复用模式。此模式只允许一个栈中只存在一个该Activity的实例,启动此模式的Activity时,如果栈中没有该Activity的实例,则会创建新的实例。如果栈中已经存在该实例了,系统会销毁在其之上的所有Activity,最终让该Activity实例置于栈顶,并回调onNewIntent()方法。
- singleInstance:单实例模式。该模式的Activity只在一个独立的任务栈中开启,并且这个新的任务栈中有且只有这一个实例。当再次启动该Activity实例时,会重用已存在的任务和实例(并调用onNewIntent)。而该Activity启动的其他Activity会自动运行与另一个任务栈中。
- singleInstance在同一个时刻,在系统中只会存在一个实例,而singleTask模式的Activity可以有多个实例,只要这些实例在不同的任务栈中即可。
- 比如应用A启动了一个singleInstance的Activity,而应用B也启动了这个Activity,那么会重用已经启动的实例。
参考文献:
- 《Android开发艺术探索》
- 《Android开发进阶从小工到专家》
推荐阅读
- Android查缺补漏--Service和IntentService
- Android查缺补漏--ContentProvider的使用
- AtCoder Regular Contest 088 E - Papple Sort(树状数组+结论)
- Android开发学习-四大组件
- android studio安装和配置kotlin
- There is no Action mapped for namespace [/] and action name [Login] associated
- Android------视频播放器(包含全屏播放,快退,快进,腾讯新闻的列表播放等)
- Android------实现图片双击放大,缩小,左右滑动的多种方式
- Android 常见异常及解决办法