有两个Activity :MainActivity 和SecondActivity
第一次启动的时候,执行的顺序是:
MainActivity onCreate().... //开始创建的时候调用
MainActivity onStart().... //能看到界面,但是不能交互 可以做一些初始化的工作,比如获取某个对象的实例或者获取流等
MainActivity onResume().... //和用户交互
然后按主页键,执行的顺序又是:
MainActivity onPause()....
MainActivity onSaveInstanceState().... //注意保存数据,因为此时:MainActivity不可见,有可能会被虚拟机回收
MainActivity onStop()....
再次进入MainActivity时(没有被摧毁),执行的顺序又是:
MainActivity onRestart()....
MainActivity onStart()....
MainActivity onResume()....
然后单击按钮跳转到SecondActivity,执行的顺序又是:
MainActivity onPause().... //保存一些需要保存的数据
SecondActivity onCreate()....
SecondActivity onStart()....
SecondActivity onResume()....
MainActivity onSaveInstanceState().... //保存数据
MainActivity onStop()....
若单击按钮跳转到SecondActivity(对话框的形式),执行的顺序又是:
MainActivity onPause()....
SecondActivity onCreate()....
SecondActivity onStart()....
SecondActivity onResume()....
MainActivity onSaveInstanceState()....
按主页键回到主页的时候,执行的顺序又是:
SecondActivity onPause()....
MainActivity onStop()....
SecondActivity onSaveInstanceState()....
SecondActivity onStop()....
再次启动程序的时候,执行的顺序又是:
MainActivity onRestart()....
MainActivity onStart()....
SecondActivity onRestart()....
SecondActivity onStart()....
SecondActivity onResume()....
按返回键回到MainActivity(MainActivity没有被回收,SecondActivity是对话框形式),执行的顺序又是:
SecondActivity onPause()....
MainActivity onResume()....
SecondActivity onStop()....
SecondActivity onDestroy()....
按返回键从SecondActivity跳转回MainActivity(MainActivity没有被回收),执行的顺序又是:
SecondActivity onPause()....
MainActivity onRestart()....
MainActivity onStart()....
MainActivity onResume()....
SecondActivity onStop()....
SecondActivity onDestroy()....
注:从上面两种情况来看,当明确知道SecondActivity是要销毁的时候,SecondActivity的onSaveInstanceState()这个方法不会执行
Activity的四种启动模式:
在activity标签中,设置属性android:launchMode
standard:默认为这种方式启动。通过这个方式启动,都会新建一个activity,将activity放入栈中;
singleTop:这种方式会首先判断activity栈顶是否为需要启动的activity,若是,则不再启动;若不是,则新建activity之后入栈
singleTask:这种方式会首先判断activity栈是否有需要启动的activity,若有,且该activity不是位于栈顶,就需要将它前面的activity全部岀栈;若没有,则新建入栈
singleInstance:这种方式是和其他程序共用一个activity
若需要递归退出activity,则可以使用onActivityResult()方法。
首先在栈顶的activity中调用方法setResult(RESULT_OK,intent)(调用位置根据实际情况决定,可能是按某个按钮退出所有的activity,也可能是按返回键退出所有的activity,
这个时候就需要重写onBackPressed()方法),接着finish()该activity,且setResult方法必须在finish之前。最后在启动它的父activity中判断resultCode是否等于它调用setResult方法设置的值,若等于,就可以finish父activity,然后再父activity中同样调用setResult方法设置值,在父activity的父activity中判断resultCode,依次类推,就可退出所有的activity。
使用startActivityForResult方法启动activity的顺序是:MainActivity----->SecondActivity------->ThirdActivity
每个activity的方法的执行顺序是:
ThirdActivity onPause()....
SecondActivity onActivityResult()....
MainActivity onActivityResult()....
SecondActivity onDestroy()....
MainActivity onDestroy()....
ThirdActivity onStop()....
ThirdActivity onDestroy()....
若在启动的时候需要传递值,且该值经过加工之后需要传回原来的activity,则需要在子activity中取出该值,加工,然后放入另外的intent中,最后在栈顶的activity中(也可以是中途的某个activity)将加工过的intent传回去。