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

一:生命周期:

????????典型情况:onCreate - onRestart -?onStart - onResume - onPause - onStop - onDestory

? ? ? ? ? ? ? ? 1.按back键:onPause - onStop - onDestory

? ? ? ? ? ? ? ? 2.按home键:onPause - onStop - onRestart - onStart - onResume

? ? ? ? ? ? ? ? 3.A(activity)? → B (activity):

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? onPause - onCreate - onStart - onResume - onStop

? ? ? ? ? ? ? ? 3(1).B(activity) 在任务栈内, onCreate 不会执行

? ? ? ? ? ? ? ? 3(2).B(activity) 是透明或者dialog 的 activity , onStop 不会执行? ? ? ??

????????异常情况:onPause - onStop - onDestory - onCreate - onStart - onResume

????????????????1.系统配置发生改变(屏幕方向;键盘;系统语言)

? ? ? ? ? ? ? ? ?2.被系统回收(内存不足)

? ? ? ? ? ? ? ? ? ? ? ? 数据的保存与恢复:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1.onSaveInstanceDate ,onRestoreInstanceDate:·(委托)

?????????????????????????????????????????系统会默认为我们保存当前Activity 的视图结构,并在重启后恢复

??????????????????????????????????????????数据?(例如:文本框输入的数据,ListView的滚动位置)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.?android:configChanges

二:启动模式

? ? ? ?standard - singleTop - singleTask - singleInstance

????????????????1.standard:多实例,任务栈有当前activity,仍然创建

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A → B?→ C?→ D? ? (启动 D)?A → B?→ C?→ D → D

????????????????2.singleTop:在栈顶的activity 不会重复创建(NewIntent)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? A → B?→ C?→ D? ? (启动 D)?A → B?→ C?→ D

? ? ? ? ? ? ? ? 3.singleTask:单实例,任务栈内有当前实例,不会再次创建? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (?NewIntent,ClearTop,TaskAffinity,allowTaskReparenting)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 任务栈? →? 实例

????????????????4.singleInstance:单实例,加强的SingleTask,单独的任务栈,只有一个实例

? ? ? ? ??启动方式:

? ? ? ? ? ? ? ? 1.AndroidMenifest:无法为Activity提供FLAG_ACTIVITY_CLEAR_TOP标识

? ? ? ? ? ? ? ? 2.Intent:不能启动 SingleInstance

? ? ? ? ? ?SingleTask:?

????????????????????????1.默认的任务栈是包名,创建时先查看当前是否是配置的任务栈,再查看所属任务栈是否有当前实例(任务栈 - activity 实例

? ? ? ? ? ? ? ? ? ? ? ? 2.clearTop (不管是位于任务栈的栈顶还是栈底,再次运行这个Activity时,都会destory掉它上面的Activity来保证整个栈中只有一个自己)

? ? ? ? ? ? ? ? ? ? ? ? 3.onNewIntent,存在 Activity 实例(onNewIntent() -> onRestart() -> onStart() -> onResume()) ,如果在 onNewIntent(Intent) 中,不调用 setIntent(Intent) 方法对 Intent 进行更新的话,那么之后在调用 getIntent() 方法时得到的依然是最初的值。不要忘记,系统可能会随时杀掉后台运行的?Activity?,如果这一切发生,那么系统就会调用?onCreate?方法,而不调用?onNewIntent?方法,一个好的解决方法就是在?onCreate?和?onNewIntent?方法中调用同一个处理数据的方法。

? ? ? ? ? ? ? ? ? ? ? ? 4.TaskAffinity(任务相关性,为singleTaskActivity 指定任务栈(默认是包名))

????????????????????????????allowTaskReparenting = true :典型应用是让一个应用程序的 Activity 转移到另一个应用程序关联的主任务中去。

三:使用场景? ? ?

?????????singleTop: 适合启动同类型的 Activity,例如接收通知启动的内容显示页面

????????singleTask: 适合作为程序入口

????????singleInstance: 适合需要与程序分离开的页面,例如闹铃的响铃界面
?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

Activity启动过程描述:

当请求启动Activity时:

????????1.Launcher进程通过Binder驱动向ActivityManagerService类发起startActivity请求;

????????2.ActivityManagerService类接收到请求后,向ActivityStack类发送启动Activity的请求;

????????3.ActivityStack类记录需启动的Activity的信息 & 调整Activity栈 将其置于栈顶、通过 Binder 驱 动 将 Activity 的启动信息传递到ApplicationThread线程中(即Binder线程)

????????4.ApplicationThread线程通过Handler将Activity的启动信息发送到主线程ActivityThread 主线? 程

????????5.ActivityThread类接收到该信息 & 请求后,通过ClassLoader机制加载相应的Activity类,最? 终调用Activity的onCreate(),最后 启动完毕


?

? ? ? ? ? ? ? ? ? ? ? ? ?????????

? ? ? ? ? ? ? ? ?
?

? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-19 17:44:27  更:2021-11-19 17:45:42 
 
开发: 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/24 4:04:01-

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