栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android 开发笔记 -- Activity

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android 开发笔记 -- Activity

Activity
  • 基本概念
  • AndroidManifest 配置
  • 生命周期
  • 保留实例状态
  • Activity 之间的导航
  • Activity 状态更改
    • 配置更改
    • Activity 或对话框显示在前台
    • 点击返回按钮
  • 任务和返回堆栈
    • 管理任务
  • 进程和应用生命周期

基本概念

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

AndroidManifest 配置

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


	  
		   
			
			
			
		
	
	  
		
			
			
		
	

生命周期

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

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

​						onStop ==> onRestart ==> onStart

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

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

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

保留实例状态

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

  • onSaveInstanceState

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

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

  • onRestoreInstanceState

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

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

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 倾向于属于哪个任务;
​  使用的taskAffinity属性修改任何给定的 Activity 的亲和性;

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

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

前台进程:

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

可见进程:

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

服务流程:

  • 无法看到的 Service;

缓存进程:

  • 目前不需要的进程;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/926723.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号