Activity 的生命周期详解
首先直接上图,如下是生命周期图,俗话说看图易懂之。
管理Activity
Activity三种状态
继续
Activity位于前台,称作“运行中”。
暂停
另一个Activity置于前台,此Activity失去焦点(如果内存不够的话也会被销毁)。
停止
此Activity完全被遮盖,已停止的Activity也会处于活动状态(Activity保留在内存中,但是对用户是不可见的),随时都可能被销毁。
实现生命周期回调
我们自己写的Activity都是继承Activity的,同时还可以重写一些方法,例子如下:
public class ExampleActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Activity被初始化 } @Override protected void onStart() { super.onStart(); // Activity可见 } @Override protected void onResume() { super.onResume(); // Activity可见,并且可以与用户交互,onStart()却不能交互 } @Override protected void onPause() { super.onPause(); // Activity被遮盖 } @Override protected void onStop() { super.onStop(); // Activity长时间被遮盖(不可见),被置于后台,这里可以做一些资源释放的操作 } @Override protected void onRestart(){ super.onRestart(); // Activity被遮盖之后,恢复到前台 } @Override protected void onDestroy() { super.onDestroy(); // Activity被销毁, 生命周期的最后一个方法, 一般在这里可以做最后的资源销毁操作 } }
这里就是Activity的7个生命周期
一些测试过来的知识
如说待Activity启动到了onResume()方法的时候,我们按Home键回到桌面会发生什么方法调用呢?
可以发现此时onPause方法和onStop方法被执行,也就是点击Home键回到主界面(Activity不可见)–>onPause()–>onStop()依次被调用 我们可以发现重新回到Activity时,调用了onRestart方法,onStart方法,onResume方法。因此, 当我们再次回到原Activity时–>onRestart()–>onStart()–>onResume()依次被调用
Activity启动模式
相信大家都对Activity有些了解了,但是我们更应该了解它的启动模式,就只有4种,理解起来都很简单。
四中模式
- standard
- singleTop
- singleTask
singleInstance
默认的模式为”standard”.
我们将它们分为两类来讲吧
standard 和 singleTop
Activity可多次实例化, 并且可以位于Activity堆栈中的任何位置
standard : 依次实例化压入Activity堆栈中
singleTop : 若Activity已在堆栈顶部, 则不会创建新的实例
singleTask 和 singleInstance
只能启动任务,它们始终位于Activity堆栈的根位置
singleTask : 在同一个应用中,只有一个实例, 在其他Activity调用它时, 会将其之上的Activity都onDestroy()掉.并调用它的onNewIntent();
singleInstance : 只有一个实例, 并且独立运行在一个task中,这个task只有这个实例,不允许其他Activity存在(这里的task为新的任务栈)