IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 安卓相关知识 -> 正文阅读

[移动开发]安卓相关知识

1、什么是Activity

2、Activity的生命周期

2.1 生命周期的几种常见情况

3、切换横竖屏时,Activity的生命周期变化

3.1 正常情况

3.2 配置 android:configChanges

4、Activity的启动模式

4.1 四大启动模式

Standard

singleTop

singleTask

SingleInstance

  • 1、什么是Activity

Activity(活动)是一个为实现交互而提供的Android应用组件。每个Activity都有一个窗口,该窗口可以全屏幕填充,也可以是一个小窗口浮动在其他窗口上。一个应用程序通常由多个Activity组成,它会指定应用程序中的某个Activity作为主Activity,这意味着当用户第一次启动应用程序时呈现给用户的活动,并且Activity可以相互跳转来执行不同的操作。

2、Activity的生命周期

?

在正常情况下,一个Activity从启动到结束会以如下顺序经历整个生命周期:
onCreate()->onStart()->onResume()->onPause()->onStop()->onDestory()。包含了六个部分,还有一个onRestart()没有调用,我们先介绍这六部分内容,因为这六部分 两两对应
初学者可以将这六部分这么记:创建一个活动->可以见到该活动显示在屏幕->该活动可以触摸操作->该活动停止,不可以操作->该活动从屏幕上消失,看不到了->该活动销毁。这六个步骤就和上面六个函数一一对应。

(1) Oncreate():创建:作为生命周期的第一种方法,仅在新的Activity创建时调用。在这个方法中,可以做一些初始化工作,比如加载接口布局资源和初始化活动所需的数据

(2) OnStart():开始:表示Activity正在启动,并且即将启动。此时Activity已经出现,我们可以看到了,但还没有出现在前台,我们还不能交互。

(3) OnResume():活动:表示Activity已经出现在前台,可见可操作。

(4) OnPause():暂停:表示活动即将停止,仍然可见,但是不能操作了。

(5) OnStop():停止:表示活动停止,此时不可见,位于后台。

(6) OnDestory():销毁:表示活动即将被销毁。这是Activity循环的最后一个回调。你可以做一些回收工作和最后的资源回收。

最后介绍第七个生命周期onRestart:

(7) OnRestart():表示Activity重启。在正常情况下,当Activity从不可见状态切换到可见状态,也就是onStop()到onStart()之间,就会调用OnRestart()。这种情况一般是由用户行为引起的。例如,用户在这个活动切换到桌面或打开另一个新的活动,然后用户返回到这个活动。

2.1 生命周期的几种常见情况

①启动ActivityA:onCreate()->onStart()->onResume()

②打开新的ActiviyB的时候,上述ActivityA的回调如下:onPause()->onStop()

③接着再次回到原ActivityA时,ActivityA的回调如下:onRestart()->onStart()->onResume()

④按back键回退ActivityA时,ActivityA的回调如下:onPause()->onStop()->onDestory()

⑤在第四个步骤不按back,而是按Home键切换到桌面后又回到该ActitiyA,ActivityA的回调如下:onPause()->onStop()->onRestart()->onStart()->onResume()

⑥调用finish()方法后,ActivityA的回调如下:onDestory()

3、切换横竖屏时,Activity的生命周期变化

正常情况下,切换横竖屏后,Activity会被销毁并重新创建,然而大部分情况,我们并不希望重新走一遍生命周期。那么我们来看看以下几种情况:

3.1 正常情况

重新走一遍生命周期:onPause()->onSaveInstanceState()-> onStop()->onDestroy()->onCreate()->onStart()->onRestoreInstanceState->onResume()

其中onSaveInstanceState和onRestoreInstanceState是两个重要的回调函数。当Activity异常退出时,系统调用onSaveInstanceState()来保存Activity当前状态。同样的,当该Activity重新创建时,会调用onRestoreInstanceState()来恢复之前的状态。

3.2 配置 android:configChanges

可以通过在AndroidManifest里配置android:configChanges,来避免切换横竖屏时Activity重新走生命周期。

复制代码

1

android:configChanges = "orientation| screenSize"

此时切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法,在该方法就可以执行其他动作啦。

注意:设置Activity的android:configChanges=”orientation”时,切屏还是会调用各个生命周期,切换横竖屏只会执行一次。

4、Activity的启动模式

一个应用程序一般包含多个Activity,多个Activity的管理是按照每个Acitivity打开的顺序排列在返回栈(Back Stack)中,并遵循“后进先出”的规则。通常情况下,当前一个ActivityA启动一个新的ActivityB时候,新的ActivityB会被加入返回栈中,并处于栈顶,获取屏幕焦点,而前一个ActivityA仍保留在返回栈中,处于停止(onStop)状态。 ActivityA停止时,如上所说,系统会调用onSaveInstanceState和onRestoreInstanceState保存其页面状态。当用户返回时候,当前处于栈顶的ActivityB会从返回栈中弹出,并被销毁(onDestroy),恢复前一个ActivityA的状态。

4.1 四大启动模式

上一段讲述的正是最常见的默认启动模式:Standard(标准模式),四大启动模式分别是:

  1. Standard:标准模式
  2. SingleTop:栈顶复用模式/单顶模式
  3. SingleTask:栈内复用模式/单任务模式
  4. SingleInstance:单例模式

Standard

默认的启动模式,新启动的Activity放入返回栈栈顶,遵循先进后出原则,同一个Activity可以被实例化多次。

singleTop

进一步思考,如果同一个ActivityA被实例化5次,那么栈顶就有5个ActivityA,但我们希望如果栈顶已经是ActivityA时,新创建一个ActivityA就不要重新实例化新的ActivityA,而是用此时栈顶的ActivityA。那么就可以用SingleTop模式,分为下面两种情况:

  • 如果当前返回栈的顶部不存在该Activity,则新建该Activity并放入栈顶;
  • 如果当前返回栈的顶部已存在Activity的一个实例,则系统会通过调用该实例的onNewIntent()方法向其传送Intent,不创建该Activity的新实例。

singleTask

单任务模式就是指一个栈里面只有一个指定的Activity。而且通常会和taskAffinity配合使用。

复制代码

1

2

3

4

<activity android:name="ActivityA"

????android:launchMode="singleTask"

????android:taskAffinity="com.android.task"

</activity>

affinity就是亲和力的意思,我们可以设置希望ActivityA在com.android.task这个栈里打开,那么就分为以下3种情况:

  • 如果com.android.task返回栈不存在,系统会新建新的返回栈,然后再创建该ActivityA的实例将其压入返回栈中;
  • 如果com.android.task返回栈存在,而且返回栈中没有该ActivityA,则新建Activity A并放入栈顶;
  • 如果com.android.task返回栈存在,而且返回栈中已经有该ActivityA:
  • 如果该ActivityA在栈顶,则不做处理;
  • 如果该ActivityA不在栈顶,会弹出其上面的所有Activity,让该ActivityA置于栈顶(返回栈中的Activity永远不会重新排列,弹出的其他Activity无法恢复);

注意:如果只是指定了android:taskAffinity属性,但是启动模式没有指定为Singletask模式,新启动的Activity依然会在原来的返回栈中。

SingleInstance

这是Singletask的升级版,创建SingleInstance启动模式的Activity时,系统都会直接创建一个新的返回栈并创建Activity的新实例置于新Task返回栈中,有两点要注意:

  • 之后系统不会将任何其他Activity的实例放入这个新建的Task中,该Activity始终是其Task唯一仅有的成员;
  • 一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例。

4.2 进阶题:谈谈四大启动模式对应的使用场景

//TODO

4.3 如何设置启动模式

我们可以通过在AndroidManifest.xml配置Activity的启动模式。

复制代码

1

android:launchMode="standard"

或者直接在代码里设置:

复制代码

1

2

3

Intent intent = new Intent(this, MyActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);

注:第二种方法设置启动模式的优先级高于第一种,如果两者都存在,以第二种为准。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:46:08  更:2022-10-17 12:48:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 21:51:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码