Activity的总结(一)

来源:互联网 发布:挚爱梵高 知乎 编辑:程序博客网 时间:2024/06/05 04:29

Activity是Android四大组件之一,简单总结一下Activity组件。

一.Activity含义

Activity 是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。

二.Activity的状态

状态 状态说明 Active/Running(运行中) 此 Activity 位于屏幕前台并具有用户焦点。 Paused(暂停) 另一个 Activity 位于屏幕前台并具有用户焦点,但此 Activity 仍可见。(另一个 Activity 显示在此 Activity 上方,并且该 Activity 部分透明或未覆盖整个屏幕。) Stopped(停止) 该 Activity 被另一个 Activity 完全遮盖,它对用户不再可见。 Killed(终止) 当Activity被系统回收掉。

三.Activity的创建和启动

1.Activity的创建
在manifest中注册Activity:
必须在清单文件中声明,系统才能访问这个Activity。

<activity android:name=".MainActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.LAUNCHER"/>            </intent-filter>        </activity>

其中在”intent-filter”中加上

<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />

表明此Activitiy是主Activity,程序启动先显示此界面。
创建Activity:
必须创建 Activity 的子类(或使用其现有子类),需要在子类中实现 Activity 在其生命周期的各种状态之间转变时系统调用的回调方法。

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);        Log.i(TAG, "onCreate: ");    }    ......}

2.启动Activity
Activity通过Intent来实现在应用程序的Activity间启动、停止和传输。
以在MainActivity上启动SecondActivity为例:
(1).显示启动:

Intent intent = new Intent(this, SecondActivity.class);startActivity(intent);

(2)隐式启动:
在清单文件中设置intent-filter的action和category、data等:

<activity android:name=".SecondActivity">            <intent-filter>                <action android:name="action_to_secondActivity"/>                <category android:name="android.intent.category.DEFAULT"/>/>            </intent-filter>        </activity>

跳转时调用:

Intent intent = new Intent(this, SecondActivity.class);startActivity(intent);

四.Activity生命周期

这里写图片描述

方法 说明 onCreate() 首次创建 Activity 时调用,是生命周期的第一个方法,在生命周期中只执行一次,用于调用setContentView去加载界面布局等初始化操作,始终后接onStart()。 onRestart() 在 Activity 已停止并即将再次启动前调用。始终后接onStart()。 onStart() 在 Activity 即将对用户可见之前调用。如果 Activity 转入前台,则后接 onResume(),如果 Activity 转入隐藏状态,则后接 onStop()。 onResume() 在 Activity 即将开始与用户进行交互之前调用。 此时,Activity 处于 Activity 堆栈的顶层,并具有用户输入焦点。始终后接 onPause()。 onPause() 当系统即将开始继续另一个 Activity 时调用。 此方法通常用于确认对持久性数据的未保存更改、停止动画以及其他可能消耗 CPU 的内容,诸如此类。 它应该非常迅速地执行所需操作,因为它返回后,下一个 Activity 才能继续执行。如果 Activity 返回前台,则后接 onResume(),如果 Activity 转入对用户不可见状态,则后接 onStop()。 onStop() 在 Activity 对用户不再可见时调用。如果 Activity 被销毁,或另一个 Activity(一个现有 Activity 或新 Activity)继续执行并将其覆盖,就可能发生这种情况。如果 Activity 恢复与用户的交互,则后接 onRestart(),如果 Activity 被销毁,则后接 onDestroy()。 onDestroy() 在 Activity 被销毁前调用。这是 Activity 将收到的最后调用。 当 Activity 结束(有人对 Activity 调用了 finish()),或系统为节省空间而暂时销毁该 Activity 实例时,可能会调用它。 您可以通过 isFinishing() 方法区分这两种情形。

特别说明:
onPause()、onStop() 和 onDestroy()三种方法返回后可以终止进程。如果系统在紧急情况下必须恢复内存,可能不会调用 onStop() 和 onDestroy()。所以onPause()成为结束进程前最后调用的方法。
因此使用 onPause() 向存储设备写入至关重要的持久性数据。

五.几种情况下生命周期方法调用

1.启动Activity:
这里写图片描述
onCreate()->onStart()->onResume();
2.按back键返回到主屏:
这里写图片描述
onPause()->onStop()->onDestroy();
3.当前Activity创建完成后,按Home键回到主屏:
这里写图片描述
onPause()->onStop();
4.点击Home键回到主界面后:
这里写图片描述
onRestart()->onStart()->onResume();
5.从当前Activity跳转到新的Activity:
这里写图片描述
原Activity的onPause()->新Activity的onCreate()->新Activity的onStart()->新Activity的onResume()->原Activity的onStop();
此时如果新Activity设置为透明主题(
android:theme=”@android:style/Theme.Translucent” )则日志为:
这里写图片描述
最后原Activity的onStop()不会执行。
6.在新Activity页面点击Back键返回到原来Activity时:
这里写图片描述
新Activity的onPause()->原Activity的onRestart()->原Activity的onStart()->原Activity的onResume()->新Activity的onStop()->新Activity的onDestroy();
当新Activity设置为透明主题,日志为:
这里写图片描述
由于5时不执行onStop(),故此时不会执行onRestart()和onStart()。

六.Activity的onSaveInstanceState和onRestoreInstanceState方法

onSaveInstanceState和onRestoreInstanceState方法不是生命周期中的方法,不一定被触发。
onSaveInstanceState方法:当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。一般在onStop方法之前。
onRestoreInstanceState方法:只有在Activity真的被系统非正常杀死过,恢复显示Activity的时候,会调用onRestoreInstanceState。一般在onResume方法之前。
说明:通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。

原创粉丝点击