Activity的总结(一)

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()适合用于数据的持久化保存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值