通过实例来了解Activity生命周期
2016-12-07 20:51
155 查看
简单的实例,通过这个实例来更加充分的了解Activity生命周期在多个Activity中切换时内置方法加载顺序,有误请指正,不喜勿喷。
MainActivity.class—–>作为Activity A
Bactivity.class ————–>作为B—activity
下图是在正常情况下,从MainActivity到Bactivity,再按Back键回到MainActivity,各个方法的加载顺序,这里Bactivity完全覆盖MainActivity。
Bactivity-->MainActivity" title="">
备注:从图片可以看出,方法onCreate(),onStart(),onResume()先加载出来,这个时候加载方法onPause()暂停MainActivity后,加载Bactivity,Bactivity还是按照onCreate(),onStart(),onResume()顺序加载,加载了这三个方法之后,MainActivity开始执行onStop()方法;当按照了Back键后,Bactivity开始onPause(),暂停之后加载MainActivity,MainActivity开始重启了,执行方法onRestart(),onStart(),onResume(),后执行Bactivity的方法onStop(),onDestory().
下图是将Bactivity主图设置为android:theme="@android:Theme.Dialog"/时,Bactivity只是弹出对话框,不能完全覆盖活动MainActivity,MainActivity处于可见状态的情况下各个方法的加载顺序:
Bactivity-->MainActivity" title="">
备注:先执行MainActivity的三个固定方法onCreate(),onStart(),onResume(),然后执行暂停方法onPause(),开始加载Bactivity中的方法;
但是在显示Bactivity中,MainActivity并没有执行方法onStop()方法,这是两者的区别。
总结:总体来说区别还是有的,在实际情况下可能还会更加复杂,先从简单的理解吧
MainActivity.class—–>作为Activity A
package com.jikexueyuan.activitylifecircle; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; public class MainActivity extends Activity { @Override protected void onDestroy() { super.onDestroy(); Log.e("TAG", "A ------ onDestroy()"); } @Override protected void onPause() { super.onPause(); Log.e("TAG", "A ------ onPause()"); } @Override protected void onRestart() { super.onRestart(); Log.e("TAG", "A ------ onRestart()"); } @Override protected void onResume() { super.onResume(); Log.e("TAG", "A ------ onResume()"); } @Override protected void onStart() { super.onStart(); Log.e("TAG", "A ------ onStart()"); } @Override protected void onStop() { super.onStop(); Log.e("TAG", "A ------ onStop()"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e("TAG", "A ------ onCreate"); setContentView(R.layout.activity_main); findViewById(R.id.btn_Bact).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View resource) { startActivity(new Intent(MainActivity.this, Bactivity.class)); } }); } }
Bactivity.class ————–>作为B—activity
package com.jikexueyuan.activitylifecircle; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class Bactivity extends Activity { @Override protected void onDestroy() { super.onDestroy(); Log.e("TAG", "B ------ onDestroy()"); } @Override protected void onPause() { super.onPause(); Log.e("TAG", "B ------ onPause()"); } @Override protected void onRestart() { super.onRestart(); Log.e("TAG", "B ------ onRestart()"); } @Override protected void onResume() { super.onResume(); Log.e("TAG", "B ------ onResume()"); } @Override protected void onStart() { super.onStart(); Log.e("TAG", "B ------ onStart()"); } @Override protected void onStop() { super.onStop(); Log.e("TAG", "B ------ onStop()"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.e("TAG", "B ------ onCreate"); } }
下图是在正常情况下,从MainActivity到Bactivity,再按Back键回到MainActivity,各个方法的加载顺序,这里Bactivity完全覆盖MainActivity。
Bactivity-->MainActivity" title="">
备注:从图片可以看出,方法onCreate(),onStart(),onResume()先加载出来,这个时候加载方法onPause()暂停MainActivity后,加载Bactivity,Bactivity还是按照onCreate(),onStart(),onResume()顺序加载,加载了这三个方法之后,MainActivity开始执行onStop()方法;当按照了Back键后,Bactivity开始onPause(),暂停之后加载MainActivity,MainActivity开始重启了,执行方法onRestart(),onStart(),onResume(),后执行Bactivity的方法onStop(),onDestory().
下图是将Bactivity主图设置为android:theme="@android:Theme.Dialog"/时,Bactivity只是弹出对话框,不能完全覆盖活动MainActivity,MainActivity处于可见状态的情况下各个方法的加载顺序:
Bactivity-->MainActivity" title="">
备注:先执行MainActivity的三个固定方法onCreate(),onStart(),onResume(),然后执行暂停方法onPause(),开始加载Bactivity中的方法;
但是在显示Bactivity中,MainActivity并没有执行方法onStop()方法,这是两者的区别。
总结:总体来说区别还是有的,在实际情况下可能还会更加复杂,先从简单的理解吧
相关文章推荐
- 通过实例了解抽象工厂
- 通过实例来了解PHP中的persistent resource和non persistent resource
- 通过实例了解抽象工厂(一)数据组件层
- GTP协议循序渐进(三)----通过实例了解TEID
- spring MethodInvokingFactoryBean 的使用和了解,Spring 通过通过方法创建Bean的实例
- 通过实例了解如何使用js获取下拉列表框内的值
- 通过一个简单的AJAX实例,了解其大致步骤
- 通过一个实例简单了解perl
- 通过实例了解接口的含义
- 通过实例了解抽象工厂(二)数据层
- GTP协议循序渐进(三)----通过实例了解TEID
- 本章通过先总体介绍UICollectionView及其常用方法,再结合一个实例,了解如何使用UICollectionView
- 3.通过AES加密实例(基于c和oc)进一步了解指针
- ASP.NET TreeView操作实例(代码调试通过)
- 在C# 编程中通过类名动态创建实例
- 通过实例学NAnt
- 通过JDBC操作ORACLE数据库实例详解
- 通过MSIL了解CLR的运行原理
- 通过几个非常实用的例子了解asp中使用正则表达式
- 生成直方图-通过观察直方图可帮助您了解数据的模式