【Activity】Activity生命周期及启动模式
2015-09-10 17:22
253 查看
Activity生命周期
先来看下经典的生命周期流程图:从这个经典的流程图中可以看出,Activity的生命周期可以分为这样几个流程:
当启动一个Activity时,首先会执行onCreate–>onStart–>onResume。此时该Activity就处于运行状态
在启动的Activity中,你的需求有可能允许弹出一个popupwindow或者dialog,此时会调用onPause方法,暂停当前Activity的执行。
当我们在popupwindow或者dialog中执行完毕需要dismiss,此时Activity将会重新在前台工作,此时会调用onResume方法,Activity进入运行状态。
当跳转到其他的Activity时,当前Activity为不可见。此时会调用onPause–>onStop方法。
我们知道,调用onPause或者onStop方法后,当前Activity处于不可交互的状态,若系统内存不足时,则会销毁当前Activity时,再次启动时,会重新调用onCreate–>onStart–>onResume
如Activity调用onStop方法,此时Activity处于停止状态时,想要重新启动Activity,此时系统会调用onRestart–>onstart–>onResume方法。
销毁一个Activity:onStop–>onDestroy
以上是Activity的基本生命周期流程,往往有时候还需要其他的生命周期方法:如onSaveInstanceState、onWindowFocusChanged等方法。
下面通过代码来进一步体会Activity的生命周期。
[code]public class MainActivity extends Activity implements View.OnClickListener{ private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i("ActivityLifeCycle","onCreate"); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(this); } @Override protected void onStart() { super.onStart(); Log.i("ActivityLifeCycle","onStart()"); } @Override protected void onResume() { super.onResume(); Log.i("ActivityLifeCycle", "onResume()"); } @Override protected void onPause() { super.onPause(); Log.i("ActivityLifeCycle", "onPause()"); } @Override protected void onStop() { super.onStop(); Log.i("ActivityLifeCycle", "onStop()"); } @Override protected void onRestart() { super.onRestart(); Log.i("ActivityLifeCycle", "onRestart()"); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Log.i("ActivityLifeCycle", "onSaveInstanceState()"); } @Override protected void onDestroy() { super.onDestroy(); Log.i("ActivityLifeCycle", "onDestroy()"); } @Override public void onClick(View v) { if (v.getId()==R.id.btn){ Intent intent = new Intent(MainActivity.this,OtherActivity.class); startActivity(intent); } } }
当首次启动程序时
我们可以看到依次执行了onCreate–>onStart–>onResume,此时Activity处于运行状态。
当我们锁屏后
执行了onPause–>onSaveInstanceState–>onStop方法,此时Activity处于不可见状态。注意:onSaveInstanceState是在onPause方法之后执行。
当我们解锁后
执行了onRestart–>onStart–>onResume,此时Activity重新处于运行状态了。
Activity启动模式
Activity的启动模式有这四种方式:Standard、SingleTop、SingleTask、SingleInstance。Standard:标准模式,若不设置任何启动模式,默认为standard模式。当为Standard模式时,一调用startActivity都会产生一个Activity的实例。
SingleTop:如果已经有一个实例在Activity的栈顶,就不创建新的实例,而是调用Activity中的newInstance()方法。如果不位于栈顶,就创建新的实例。
SingleTask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop;
SingleInstance:
相关文章推荐
- POJ-2942 Knights of the Round Table
- iOS 正则判断,支持13,15,18,176,177,178开头
- IOS 下cocos2dx3.X 启动流程:
- memcached全面剖析–5. memcached的应用和兼容程序
- http协议
- 恢复oracle中误删除drop掉的表
- 闲聊1
- IOS懒加载介绍
- CSS3动画笔记
- SDUTOJ 3307 a(k大背包)
- C++学习心得
- memcached全面剖析–4. memcached的分布式算法
- Struts2常用标签总结
- POJ 1050 To the Max (最大连续区间和+暴力枚举,水题)
- php生成指定长度的随机数
- 【.Net码农】C#WinForm编程中多语言的实现
- 并查集小结
- 安卓错误E/AndroidRuntime(4054):java.lang.NullPointerException
- 我的vimrc 配置
- 如何解决ajax跨域问题