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 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 开发笔记 -- Activity -> 正文阅读

[移动开发]Android 开发笔记 -- Activity

基本概念

??简单理解:用户界面,MVC 中属于 Controller,Activity 经常会启动属于其它应用的 Activity。

AndroidManifest 配置

下面是 Activity 在 manifest 中的基本配置:

<application ...>
	<activity android:name=".ExampleActivity">  <!-- 基本信息的设置:名称、图标、权限等等 -->
		<intent-filter>   <!-- 启动 Activity 的过滤器 -->
			<action android:name="android.intent.action.SEND" />
			<category android:name="android.intent.category.DEFAULT" />
			<data android:mimeType="text/plain" />
		</intent-filter>
	</activity>
	<activity 
		android:name=".MainActivity"
		android:exported="true">  <!-- 其它应用是否访问 -->
		<intent-filter>
			<action android:name="android.intent.action.MAIN" />
			<action android:name="android.intent.category.LAUNCHER" />
		</intent-filter>
	</activity>
</application>

生命周期

如下图所示,展示了 Activity 的生命周期:

activity-lifecycle

onCreate ==> onStart ==> onResume ==> onPause ==> onStop ==> onDestroy

?						onStop ==> onRestart ==> onStart

一些细节:
??1、暂停和停止状态的一些区别:
??暂停时 Activity 是部分或者完全可见的;==> 启动新的对话框或者透明的 Activity 在某个 Activity 上;
??停止时 Activity 是完全不可见的;

??2、设备上有很多应用,但任何时候只能有一个 Activity 处于能与用户交互的运行状态;

??3、在对应的生命周期中初始和释放资源,如:onStart <===> onStop;onResume <===> onPause

保留实例状态

应组合使用持久性本地存储、onSaveInstanceStateViewModel类来保存数据;

  • onSaveInstanceState

    该方法默认实现保存有关 Activity 视图层次结构状态的瞬时信息,例如:EditText 微件中的文本或 ListView 微件的滚动位置;

    用户显示关闭 Activity 或者调用 finish 时,系统不会调用 onSaveInstanceState 方法;

  • onRestoreInstanceState

    call after onStart,可以选择是在 onCreate 还是 onRestoreInstanceState 中恢复信息;

    这里不需要检查 Bundle 是否为 null,因为只有需要恢复信息的时候才会调用该方法;

android-saveInstanceState

Activity 之间的导航

导航到新 Activity:

  • startActivity(Intent)

  • startActivityForResult(Intent, requestCode: int)

    从启动的 Activity 中获取返回的结果;第二个参数用于消除多次调用的歧义;

    子 Activity 使用 setResult(int)将数据返回到父级;

    父 Activity 使用 onActivityResult(requestCode: int, resultCode: int, data: Intent?)接收数据;

启动另一个 Activity 时生命周期方法调用过程:

?	A.onPause ==> B.onCreate ==> B.onStart ==> B.onResume ==> A.onStop

Activity 状态更改

配置更改

触发配置更改的事件:
??横屏和竖屏之间的变化、多窗口模式、语言或输入设备的改变;

??在设备配置改变时,会先销毁 Activity ,然后创建 Activity,为新配置寻找最佳资源;多窗口模式,也只有一个应用处于前台,即一个 onResume ,一个 onPause。

Activity 或对话框显示在前台

部分覆盖:onPause

全部覆盖:onStop

点击概览或主屏幕时,系统的行为就好像当前 Activity 已被完全覆盖一样;

点击返回按钮

??返回按钮会销毁 Activity ,并且从返回堆栈中移除;该情况下默认不会触发 onSaveInstanceState回调;实现onBackPressed可以自定义该行为,但同时应该调用父类方法。

任务和返回堆栈

任务:

  • 启动新应用,如果该应用没有任务存在,则会创建新任务;
  • 任务是一系列 Activity 的集合,按照打开顺序排列在一个返回堆栈中;
  • 堆栈中的 Activity 不会被重新排列,只会被送入和退出;

管理任务

定义启动模式:

  • 使用清单文件

    通过 标签指定 android:launchMode属性选择启动模式;

    • standard,默认,每次启动都会创建新的 Activity 的实例,在返回栈中入栈;
    • singleTop,Activity 处于返回栈栈顶时不会再创建新的 Activity;
    • singleTask,检查返回栈中是否存在对应 Activity 的实例,将之上的 Activity 出栈;没有则创建;
    • singleInstance,启用新的返回栈管理 Activity;
    • singleInstancePerTask,android 12 上可检验;
  • 使用 Intent 标记

    • FLAG_ACTIVITY_NEW_TASK == singleTask

    • FLAG_ACTIVITY_SINGLE_TOP == singleTop

    • FLAG_ACTIVITY_CLEAR_TOP 如果要启动的 Activity 已经在当前任务中运行,则销毁位于它之上的所有 Activity;

??优先遵循 Activity A 的请求(Intent 中的定义),而不是 Activity B 的请求(在清单中的定义);

处理亲和性:
??亲和性表示 Activity 倾向于属于哪个任务;
???使用<activity />taskAffinity属性修改任何给定的 Activity 的亲和性;

清除返回堆栈:
??如果用户离开任务较长时间,系统会清除任务中除根 Activity 以外的所有 Activity;

  • alwaysRetainTaskState,设置为 True,则不会发生上述默认行为;
  • clearTaskOnLaunch,一旦离开再返回就会被清除只剩根 Activity;
  • finishOnTaskLaunch,作用于单个 Activity ,包括根 Activity,只要离开任务将不再存在;

进程和应用生命周期

前台进程:

  • 互动屏幕上运行一个 Activity;
  • BroadcastReceiver 正在运行;
  • Service 正在执行某个回调;

可见进程:

  • 运行的 Activity 可见,但不在前台;
  • Service 正在通过 Service.startForeground
  • 系统正在使用其托管的服务;

服务流程:

  • 无法看到的 Service;

缓存进程:

  • 目前不需要的进程;
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-25 11:39:46  更:2022-05-25 11:40:14 
 
开发: 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年11日历 -2024/11/25 0:55:59-

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