`
ydbc
  • 浏览: 767108 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Android理解:Activity状态和生命周期

 
阅读更多

要想理解Activity的生命周期,必先理解Activity的状态。

一、Activity状态

Android官方文档中把Activity分为下面三种状态:

1、Resumed(活动状态)

或者叫Running状态,这个Activity正在屏幕上显示,并且有用户焦点。这个很好理解,就是用户正在操作的那个界面。

2、Paused(暂停状态)

这是一个比较不常见的状态。这个Activity在屏幕上是可见的,但是并不是在屏幕最前端的那个Activity。比如有另一个非全屏或者透明的Activity是Resumed状态,没有完全遮盖这个Activity。

比如下面这个情况,SecondActivity是Resumed状态,但是并未完全覆盖MainActivity,此时MainActivity就是Paused状态。


3、Stopped(停止状态)

当Activity完全不可见时,此时Activity还在后台运行,仍然在内存中保留Activity的状态,并不是完全销毁。

这个也很好理解,当跳转的另外一个界面,之前的界面还在后台,按回退按钮还会恢复原来的状态,大部分软件在打开的时候,直接按Home键,并不会关闭它,此时的Activity就是Stopped状态。


二、Activity生命周期

和Activity生命周期相关的方法有下面几个:

onCreate(Bundle savedInstanceState)

onStart()

onRestart()

onResume()

onPause()

onStop()

onDestroy()

相对来说方法数量比较多,初学者理解起来比较困难。

Android官方文档中把Activity生命周期分为三个区间:

1、The entire lifetime(整个生命周期)

是指在onCreate()和onDestroy()之间的周期。

一个人的一生,就是从出生开始,到死亡的这段时间。Activity生命周期也是一样,从Create开始,直到Destroy,二者在整个生命周期都只有一次。当用户新打开一个界面,此时会调用onCreate(),当用户关闭这个界面,例如按返回键,此时Activity就完全销毁,此时会调用onDestroy()。

这个周期之间包含上面所说的全部状态:Resumed、Paused、Stopped。

2、The visible lifetime(可见的生命周期)

是指在onStart()和onStop()之间的周期,包含在The entire lifetime

之中。在整个生命周期中可能会有多次。

这段周期包含Resumed、Paused两种状态,即两种Activity可见的状态。

当Activity会变为Stopped状态,例如在新的Activity覆盖掉原来的Activity时,会调用onStop()方法,重新回到原来的Activity时,又会调用onStart()。

3、The foreground lifetime(活动生命周期)

是指在onResume()和onPause()之间的周期,包含在The visible lifetime之中。在The visible lifetime中可能会有多次。

这段周期只包含Resumed一种状态,即前端获取焦点用户可操作的状态。

当Activity变为Resumed状态,会调用onResume()方法,反之会调用onPause()方法。

说到这里,还漏了一个onRestart(),很简单,Activity第一次onStart()会在onCreate()之后,如果在整个生命周期中再次onStart(),那么调用onStart()之前会调用onRestart()。


下面分别来进行上面三者的实验:

MainActivity界面上有两个按钮,分别是打开SecondActivity和ThirdActivity:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <Button 
        android:id="@+id/secondActivityButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="打开SecondActivity"/>
    <Button 
        android:id="@+id/thirdActivityButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="打开ThirdActivity"/>
</LinearLayout>

在MainActivity.java中,重写生命周期相关方法,加上日志:

public class MainActivity extends Activity {
	
	private static final String TAG = "MainActivity";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initEvent();
		
		Log.v(TAG, "onCreate");
	}

	@Override
	protected void onStart() {
		super.onStart();
		Log.v(TAG, "onStart");
	}
	
	@Override
	protected void onRestart() {
		super.onRestart();
		Log.v(TAG, "onRestart");
	}

	@Override
	protected void onResume() {
		super.onResume();
		Log.v(TAG, "onResume");
	}
	
	@Override
	protected void onPause() {
		super.onPause();
		Log.v(TAG, "onPause");
	}
	
	@Override
	protected void onStop() {
		super.onStop();
		Log.v(TAG, "onStop");
	}
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		Log.v(TAG, "onDestroy");
	}
	
	private void initEvent() {
		// 点击打开SecondActivity
		Button secondActivityButton = (Button) findViewById(R.id.secondActivityButton);
		secondActivityButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				Intent intent = new Intent(MainActivity.this, SecondActivity.class);
				startActivity(intent);
			}
		});
		// 点击打开ThirdActivity
		Button thirdActivityButton = (Button) findViewById(R.id.thirdActivityButton);
		thirdActivityButton.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View view) {
				Intent intent = new Intent(MainActivity.this, ThirdActivity.class);
				startActivity(intent);
			}
		});
	}
}

Second分别是两个测试Activity,代码和xml这里不再贴出来了。

最后AndroidManifest.xml:

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name="com.example.app012.MainActivity"
            android:label="MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.app012.SecondActivity"
            android:label="SecondActivity" >
        </activity>
        <activity
            android:name="com.example.app012.ThirdActivity"
            android:label="ThirdActivity" 
            android:theme="@android:style/Theme.Dialog">
        </activity>
    </application>

这里SecondActivity是一个普通的Activity,ThirdActivity设置android:theme="@android:style/Theme.Dialog",表示它显示为一个对话框,打开ThirdActivity不会完全覆盖MainActivity状态,是用来实验MainActivity的Paused状态的。

实验步骤:

1、

在模拟器中运行程序,此时日志:

onCreate

onStart

onResume

再按返回键退出程序:

onPause

onStop

onDestroy

上面模拟了The entire lifetime整个生命周期,刚打开程序时onCreate到Activity销毁onDestroy。

2、

打开程序后,按“打开SecondActivity”按钮:

onPause

onStop

再按返回键回到MainActivity:
onRestart

onStart

onResume

再按Home键回到桌面:

onPause

onStop

再打开程序:

onRestart

onStart

onResume

以上模拟The visible lifetime,当MainActivity转到后台不可见时调用onStop,再次可见时onStart,由于是再次可见,会调用onRestart。


3、

打开程序后,按“打开ThirdActivity”按钮:

onPause

此时MainActivity没有完全被覆盖:


再按返回键:

onResume

上面模拟The foreground lifetime,失去焦点后onPause,重新得到焦点后onResume。


通过上面实验,可以看出:

The foreground lifetime(onResume到onPause)包含在Thevisible lifetime(onStart到onStop)之中,The visible lifetime包含在The entire lifetime(onCreate到onDestroy)之中。


作者:叉叉哥 转载请注明出处:http://blog.csdn.net/xiao__gui/article/details/11464603



分享到:
评论

相关推荐

    Android 中从activity1跳转到activity2再回到activity所经历的生命周期

    在Android开发过程中,理解Activity的生命周期对于管理界面状态、处理用户交互以及响应系统事件至关重要。本文将详细解析从一个Activity(Activity1)跳转到另一个Activity(Activity2),然后再返回到原Activity...

    android Activity生命周期

    深入理解Activity生命周期,查看源码是非常重要的一步。通过阅读`ActivityManagerService`和`ActivityThread`类的源码,我们可以了解系统如何管理Activity的生命周期。例如,`ActivityThread`中的`...

    Android Activity生命周期

    在实际开发中,理解 Activity 生命周期非常重要,正确地使用生命周期方法可以提高应用程序的性能和稳定性。 例如,在 onCreate() 方法中,我们可以加载布局、设置监听器等。在 onResume() 方法中,我们可以恢复 ...

    Android Activity ABC页面跳转生命周期变化及activity + fragment生命周期变化

    总之,掌握Activity和Fragment的生命周期是Android开发者必备的基础技能。正确管理它们的生命周期可以避免内存泄漏,提高应用性能,并确保用户在各个界面之间的流畅切换。在实际开发中,我们需要根据需求灵活运用...

    Android屏幕旋转时Activity的生命周期

    为了确保用户体验的连续性,你应该在`onPause()`和`onStop()`中释放那些不影响Activity状态的资源,如网络连接或数据库操作。而在`onDestroy()`中,可以清理那些可能不再需要的全局变量或注册的监听器。 屏幕旋转时...

    Android activity生命周期示例

    本示例项目“Android activity生命周期示例”旨在帮助开发者深入理解Activity的生命周期及其各个阶段,这对于优化用户体验和资源管理至关重要。 Activity的生命周期包括以下几个主要状态: 1. **创建(Created)**...

    android生命周期管理:启动一个Activity

    在Android开发中,Activity是...总之,理解并有效地管理Activity的生命周期是Android开发的基础,能够帮助你创建稳定、高效的应用程序。在实际开发中,你还需要考虑内存管理、异常处理和其他与Activity相关的最佳实践。

    android启动以及activity生命周期分析

    在Android开发过程中,理解应用程序如何启动及Activity的生命周期是非常重要的。这不仅有助于我们更好地管理程序的状态,还能帮助我们在遇到内存泄漏等问题时进行快速定位和解决。 #### ActivityThread `...

    Android Activity和Fragment的生命周期测试代码

    总的来说,理解和掌握Activity和Fragment的生命周期是Android开发的基础,它涉及到用户体验、性能优化和资源管理等多个方面。通过"LifecycleLog"这样的测试代码,开发者可以更好地理解生命周期机制,从而编写出更...

    Activity生命周期与启动模式

    理解Activity的生命周期和启动模式对于开发高效、稳定的应用至关重要。让我们深入探讨Activity的7大生命周期以及4种启动模式。 **Activity生命周期** Activity的生命周期包括了从创建到销毁的各个阶段,主要有以下...

    android activity的生命周期小例子

    Activity的生命周期是Android开发者必须深入理解的关键概念,因为它直接影响到应用的性能、内存管理和用户体验。在这个“android activity的生命周期小例子”中,我们将探讨Activity在不同场景下如何启动、暂停、...

    android Activity生命周期详解(图文)

    总之,深入理解Activity生命周期和其背后的源码逻辑,对于编写高效、响应迅速且用户体验优秀的Android应用至关重要。开发者应熟练掌握这些知识点,以便在设计和调试应用时能得心应手。通过实践和分析ActivityDemo,...

    Activity和Fragment生命周期研究

    总之,Activity和Fragment是Android开发中的核心组件,理解它们的生命周期对于编写高效、稳定的应用至关重要。开发者需要熟练掌握各个生命周期方法的调用时机,以及如何在这些方法中恰当地处理业务逻辑,以提供流畅...

    android activity 生命周期

    在Android开发中,Activity是构建用户界面的基本单元,它的生命周期是开发者必须深入理解的关键概念。在Android应用程序中,Activity扮演着展示用户交互界面并处理用户输入的角色。它并不直接提供界面,而是作为UI...

    android activity 生命周期详细介绍

    为了更好地理解和掌握Activity的工作机制,本文将详细介绍Android Activity的生命周期及其各个阶段的状态转换,帮助开发者深入理解并正确管理Activity的生命周期。 ### 一、Android Activity生命周期介绍 #### 1. ...

    Android_Activity_生命周期例子

    总之,理解Activity的生命周期是Android开发的基础,而`ActionBarCompat`则提供了在老版本Android设备上实现现代界面设计的途径。通过实践这些例子,开发者能够更好地优化他们的应用,提供一致且流畅的用户体验。

    深入理解Activity生命周期

    深入理解Activity的生命周期至关重要,因为它直接影响到应用的性能、响应性和用户体验。本文将详细探讨Activity的生命周期,以及如何通过示例代码"RestoreActivityStateDemo"来理解和管理这一过程。 Activity的生命...

    Activity生命周期完整介绍

    理解Activity的生命周期至关重要,因为这直接影响到应用程序的行为和性能。本篇文章将深入探讨Activity的生命周期,包括各个状态、转换过程以及如何在这些状态之间进行妥善管理。 Activity的生命周期可以分为几个...

    android实例 体验Activity的生命周期

    这个生命周期是开发者必须理解和掌握的关键概念,因为它直接影响到应用的性能、内存管理和用户体验。 在Android Studio 3.1.1这样的开发环境中,我们可以利用MVC(Model-View-Controller)设计模式来构建应用程序。...

Global site tag (gtag.js) - Google Analytics