| |
|
开发:
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 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |