Android中Activity生命周期详解
2013-06-20 01:49
351 查看
本文中先给出一个简单程序,实现两个页面之间相互跳转,分别打印出它们生命周期过程中的状态变化,然后在后面详解Activity生命周期。
第一个Activity:
第二个Activity:
两个Activity的布局界面非常简单,本文不再给出。
打印的日志:
一、都是全屏覆盖时:
启动FirstActivity时,打印
FirstActivity ---> 进入onCreate
FirstActivity --->进入onStart
FirstActivity --->进入onResume
从FirstActivity跳到SecondActivity时,打印
FirstActivity --->进入onPause
SecondActivity--->进入onCreate
SecondActivity--->进入onStart
SecondActivity--->进入onResume
FirstActivity --->进入onStop
从SecondActivity返回到FirstActivity时,打印
①若采用new Intent():
SecondActivity--->进入onPause
FirstActivity --->进入onCreate
FirstActivity --->进入onStart
FirstActivity --->进入onResume
SecondActivity--->进入onStop
②若采用finish()结束当前Activity,上一个Activity会自动出现在栈顶,打印
SecondActivity--->进入onPause
FirstActivity--->进入onRestart
FirstActivity --->进入onStart
FirstActivity --->进入onResume
SecondActivity--->进入onStop
SecondActivity--->进入onDestroy
二、现在给AndroidMainfest.xml中的SeconedActivity属性加入android:theme="@android:style/Theme.Dialog",则SeconedActivity将以对话框形式出现,不会对FirstActivity形成遮盖.
这时从FirstActivity 跳转到SecondActivity的状态变化为:
FirstActivity ---> 进入onCreate
FirstActivity --->进入onStart
FirstActivity --->进入onResume
FirstActivity--->进入onPause
SecondActivity--->进入onCreate
SecondActivity--->进入onStart
SecondActivity--->进入onResume
这时区别在于FirstActivity比完全遮盖时少调用了onStop方法.
然后从SecondActivity返回到FirstActivity 时:
①采用new Intent 方式,打印
SecondActivity--->进入onPause
FirstActivity --->进入onStop
FirstActivity ---> 进入onCreate
FirstActivity --->进入onStart
FirstActivity --->进入onResume
SecondActivity--->进入onStop
②采用finish 方式,打印
SecondActivity--->进入onPause
[b]FirstActivity --->进入onResume[/b]
SecondActivity--->进入onStop
SecondActivity--->进入onDestroy
总结几点:
1.onPause 用于由一个Activity转到另一个Activity、设备进入休眠状态(屏幕锁住了)、或者有dialog弹出时。
2.onStop 用于不可见的Activity,即当前的Activity完全被遮住,所以,请注意:有对话框弹出时,这时底下的activity仍然可见,所以此时onStop不会被调用。
故,本文在清单文件中声明SecondActivity以对话框形式显示时,不会对第一个Activity完全覆盖,所以第一个Activity只会执行onPause,而不会执行onStop,锁屏也是一样的效果。
3.调用finish方法是kill掉当前Activity,在执行onStop后,会执行onDestroy,并且这时返回到的第一个Activity不是new出来的,所以不会再调用onCreate。
4.若当前Activity暂停时只执行了onPause,那么暂停结束后,只需执行[b]onResume,比如下列两种情况:[/b]
①当前FirstActivity 跳转出现一个对话框形式的SecondActivity,而SecondActivity自己直接finish即摧毁时
②屏幕锁屏时,然后又打开时
第一个Activity:
package com.lovo.activity; import com.lovo.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; /** * 测试Activity的生命周期 * * @author guyun * */ public class LifeCycleActivity extends Activity { /** * 第一次启动时调用,可以进行组件的初始化 */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.move_main); Log.i("LifeCycleActivity.onCreate", "进入onCreate"); Button btn = (Button) findViewById(R.id.move_main_btn_start); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(LifeCycleActivity.this, SecondActivity.class); startActivity(intent); } }); } /** * 程序启动时调用 */ @Override protected void onStart() { super.onStart(); Log.i("LifeCycleActivity.onStart", "进入onStart"); } /** * 当Activity被恢复时调用,可以进行状态的恢复 */ @Override protected void onResume() { super.onResume(); Log.i("LifeCycleActivity.onResume", "进入onResume"); } /** * 当程序被其他程序打断时调用,可以保存相应状态 */ @Override protected void onPause() { super.onPause(); Log.i("LifeCycleActivity.onPause", "进入onPause"); } /** * 启动另一个Activity,执行于onPause之后,并且当前Activity完全被遮住时调用 */ @Override protected void onStop() { super.onStop(); Log.i("LifeCycleActivity.onStop", "进入onStop"); } /** * 当程序中断结束后,可以重启程序 */ @Override protected void onRestart() { super.onRestart(); Log.i("LifeCycleActivity.onRestart", "进入onRestart"); } /** * 当Activity销毁时调用,可以进行清理操作 */ @Override protected void onDestroy() { super.onDestroy(); Log.i("LifeCycleActivity.onDestroy", "进入onDestroy"); } }
第二个Activity:
package com.lovo.activity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import com.lovo.R; public class SecondActivity extends Activity { /** * 第一次启动时调用,可以进行组件的初始化 */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_main); Log.i("SecondActivity.onCreate", "进入onCreate"); Button btn = (Button) findViewById(R.id.second_main_btn_back); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(SecondActivity.this, LifeCycleActivity.class); startActivity(intent); // finish(); } }); } /** * 程序启动时调用 */ @Override protected void onStart() { super.onStart(); Log.i("SecondActivity.onStart", "进入onStart"); } /** * 当Activity被恢复时调用,可以进行状态的恢复 */ @Override protected void onResume() { super.onResume(); Log.i("SecondActivity.onResume", "进入onResume"); } /** * 当程序被其他程序打断时调用,可以保存相应状态 */ @Override protected void onPause() { super.onPause(); Log.i("SecondActivity.onPause", "进入onPause"); } /** * 启动另一个Activity,执行于onPause之后,并且当前Activity完全被遮住时调用 */ @Override protected void onStop() { super.onStop(); Log.i("SecondActivity.onStop", "进入onStop"); } /** * 当程序中断结束后,可以重启程序 */ @Override protected void onRestart() { super.onRestart(); Log.i("SecondActivity.onRestart", "进入onRestart"); } /** * 当Activity销毁时调用,可以进行清理操作 */ @Override protected void onDestroy() { super.onDestroy(); Log.i("SecondActivity.onDestroy", "进入onDestroy"); } }
两个Activity的布局界面非常简单,本文不再给出。
打印的日志:
一、都是全屏覆盖时:
启动FirstActivity时,打印
FirstActivity ---> 进入onCreate
FirstActivity --->进入onStart
FirstActivity --->进入onResume
从FirstActivity跳到SecondActivity时,打印
FirstActivity --->进入onPause
SecondActivity--->进入onCreate
SecondActivity--->进入onStart
SecondActivity--->进入onResume
FirstActivity --->进入onStop
从SecondActivity返回到FirstActivity时,打印
①若采用new Intent():
SecondActivity--->进入onPause
FirstActivity --->进入onCreate
FirstActivity --->进入onStart
FirstActivity --->进入onResume
SecondActivity--->进入onStop
②若采用finish()结束当前Activity,上一个Activity会自动出现在栈顶,打印
SecondActivity--->进入onPause
FirstActivity--->进入onRestart
FirstActivity --->进入onStart
FirstActivity --->进入onResume
SecondActivity--->进入onStop
SecondActivity--->进入onDestroy
二、现在给AndroidMainfest.xml中的SeconedActivity属性加入android:theme="@android:style/Theme.Dialog",则SeconedActivity将以对话框形式出现,不会对FirstActivity形成遮盖.
这时从FirstActivity 跳转到SecondActivity的状态变化为:
FirstActivity ---> 进入onCreate
FirstActivity --->进入onStart
FirstActivity --->进入onResume
FirstActivity--->进入onPause
SecondActivity--->进入onCreate
SecondActivity--->进入onStart
SecondActivity--->进入onResume
这时区别在于FirstActivity比完全遮盖时少调用了onStop方法.
然后从SecondActivity返回到FirstActivity 时:
①采用new Intent 方式,打印
SecondActivity--->进入onPause
FirstActivity --->进入onStop
FirstActivity ---> 进入onCreate
FirstActivity --->进入onStart
FirstActivity --->进入onResume
SecondActivity--->进入onStop
②采用finish 方式,打印
SecondActivity--->进入onPause
[b]FirstActivity --->进入onResume[/b]
SecondActivity--->进入onStop
SecondActivity--->进入onDestroy
总结几点:
1.onPause 用于由一个Activity转到另一个Activity、设备进入休眠状态(屏幕锁住了)、或者有dialog弹出时。
2.onStop 用于不可见的Activity,即当前的Activity完全被遮住,所以,请注意:有对话框弹出时,这时底下的activity仍然可见,所以此时onStop不会被调用。
故,本文在清单文件中声明SecondActivity以对话框形式显示时,不会对第一个Activity完全覆盖,所以第一个Activity只会执行onPause,而不会执行onStop,锁屏也是一样的效果。
3.调用finish方法是kill掉当前Activity,在执行onStop后,会执行onDestroy,并且这时返回到的第一个Activity不是new出来的,所以不会再调用onCreate。
4.若当前Activity暂停时只执行了onPause,那么暂停结束后,只需执行[b]onResume,比如下列两种情况:[/b]
①当前FirstActivity 跳转出现一个对话框形式的SecondActivity,而SecondActivity自己直接finish即摧毁时
②屏幕锁屏时,然后又打开时
相关文章推荐
- Android四大组件之---activity生命周期详解
- Android中Activity生命周期和启动模式详解
- Android Activity 生命周期详解
- 详解Android中的Activity生命周期
- 深入剖析Android四大组件(一)——Activity生命周期详解
- android activity详解二:Activity的生命周期
- xamarin Android activity生命周期详解
- Android Activity生命周期详解
- Android进阶(一) Activity 的生命周期详解
- 详解Android Activity 生命周期
- 【Android 开发】:Activity的生命周期 及 AndroidManifest.xml 文件详解
- Android的四大组件之Activity生命周期详解
- xamarin Android activity生命周期详解
- 【Android Training - 01】详解Activity生命周期 [ Lesson 0 - 章节概览 ]
- 【Android Training - 01】详解Activity生命周期 [ Lesson 3 - 停止与重启Activity ]
- Android Activity的生命周期详解
- Android 程式开发:(一)详解Activity —— 1.1生命周期(前言)
- Android Activity生命周期详解
- android activity详解二:Activity的生命周期
- 有关Android Activity生命周期详解