Android 四大组件之Activity

Activity 是安卓四大组件之一,也是最常用最重要的组件。

四大组件:Activity、Service、Content provider、Broadcast Receiver。

通常一个Activity表示的就是一屏(也就是App的某个界面)。Activity 相当于MVC模式中的Controller,它用来管理数据与View的联系,以及View的交互行为处理。
与iOS 中的UIViewController类似,它要关联一个xml作为一个界面的视图。

Activity 的生命周期

首先用图来总览一下Activity的生命周期,以及各种状态。

在这里插入图片描述

Activity 从创建到最后销毁一共会调用的方法,以及所处的状态。

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

在通过intent启动一个Activity之后,就会触发onCreate()

onCreate() 是Activity创建会调用的生命周期函数,在这个函数里要为Activity关联一个布局文件。而且它有一个savedInstanceState参数,如果该Activity是第一次创建,则这个参数为null,如果不为null,就可以从中取出保存的数据等。 执行完这个函数,Activity 就是Created状态了。这个状态是个瞬时状态,因为执行完这个函数,系统就会调用onStart()函数。

onStart() 是系统执行完onCreate()之后,自动调用的。在这个阶段Activity 上的视图是可见,但是不可交互(也就是不响应用户的点击、触摸等交互行为)。 执行完这个函数后,Activity就是Started了,这个状态也是瞬时状态。执行完该函数,系统就会自动调用onResume()

onResume() 是系统执行完onStart()之后,自动调用的。在这个阶段Activity 上的视图是可见,并且可交互的。执行完这个函数后,Activity 就是Resumed,这个状态是长期状态,只要用户没有进行页面跳转或者切到后台等,Activity就是一直处于Resumed状态。

onPause() 是用户触发了某些行为后由系统调用的,在这个阶段界面是可见的,但是不可交互。执行完这个函数后,Activity 就是Paused 状态,因为不同的情况,它有可能是瞬时状态,也有可能是长期状态。比如,跳转到一个透明的Activity页面,它就是长期的Paused 状态,如果是返回到上一个界面,那么它就是瞬时状态,因为执行完该函数,系统会自动调用onStop()。注意:无论什么原因导致activity停止,系统总是会在onStop()之前调用onPause()方法。

onStop() 当用户离开我们的activity时,系统会调用onStop()来停止activity (1). 这个时候如果用户返回,系统会调用onRestart()(2), 之后会迅速调用onStart()(3)与onResume()(4). 当activity调用onStop()方法, activity不再可见,并且应该释放那些不再需要的所有资源。一旦activity停止了,系统会在需要内存空间时摧毁它的实例(和栈结构有关,通常back操作会导致前一个activity被销毁)。

onDestroy() 是Activity生命周期最后一个生命周期方法.当收到需要将该activity彻底移除的信号时,系统会调用这个方法。

onRestart() 是该Activity跳转到其他非透明Activity后,再然后又返回到该Activity后,系统会先调用onRestart(),然后迅速调用onStart()onResume()

在实际场景中查看生命周期方法执行顺序

场景一

从点击桌面App图标,进入到Activity A ,然后点击 Activity A 上的一个按钮跳转到 Activity B,然后点击左上角导航栏返回按钮回到 Activity A,在点击底部返回键,App被关闭 (Activity A 和 B都是非透明视图)。

A onCreate()----> A onStart() ----> A onResume() ----> A onPause() ----> B onCreate() ----> B onStart() ----> B onResume() ----> A onStop() ----> B onPause() ----> A onRestart() ----> A onStart() ----> A onResume() ----> B onStop() ----> B onDestroy() ----> A onPause() ----> A onStop() ----> A onDestroy()

画个流程图来看,我将其分为两个阶段:

从点击桌面App图标, 一直到 跳转到 Activity B:

Created with Raphaël 2.2.0 启动App A onCreate() A onStart() A onResume() A onPause() B onCreate() B onStart() B onResume() A onStop()

从点击左上角返回 一直 到关闭App:

Created with Raphaël 2.2.0 B onPause() A onRestart() A onStart() A onResume() B onStop() B onDestroy() A onPause() A onStop() A onDestroy() 关闭App

场景二

从点击桌面App图标,进入到Activity A ,然后点击 Activity A 上的一个按钮跳转到 Activity B,然后点击左上角导航栏返回按钮回到 Activity A,在点击底部返回键,App被关闭 (Activity A 是背景非透明界面,B是背景透明的界面)。

整个函数调用顺序如下:

A onCreate()----> A onStart() ----> A onResume() ----> A onPause() ----> B onCreate() ----> B onStart() ----> B onResume()----> B onPause() ----> A onResume()----> B onStop() ----> B onDestroy()----> A onPause() ----> A onStop() ----> A onDestroy()

我们依然将其分为两个阶段:
从点击App 图标,到跳转到B 界面:

Created with Raphaël 2.2.0 启动App A onCreate() A onStart() A onResume() A onPause() B onCreate() B onStart() B onResume()

从 点击左上角返回到 关闭App,流程图是这样的:

Created with Raphaël 2.2.0 B onPause() A onResume() B onStop() B onDestroy() A onPause() A onStop() A onDestroy() 关闭App

更详尽的Activity生命周期相关资料可以看这里:管理Activity生命周期

设置Activity 背景透明的几种方式

直接在manifest 中设置Activity的属性

@android:style/Theme.Translucent
@android:style/Theme.Translucent.NoTitleBar
@android:style/Theme.Translucent.NoTitleBar.Fullscreen

示例代码:

<activity
    android:name=".SecondActivity"
    android:theme="@android:style/Theme.Translucent">
</activity>

注意:如果Activity 是继承一些特殊的Activity 可能就不能设置一些基本的Theme样式。
例如继承自AppCompatActivity,如果设置上面这三种透明样式,应用就会崩溃。提示只能设置AppCompat的Theme。

其他的自定义Style,然后再Manifest中设置主题样式的方式,跟上面原理差不多,就不再这里赘述了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值