这是我参与「第四届青训营 」笔记创作活动的第3天
客户端基础知识必备 课堂笔记01
认知方法
What Why How
对开发者来说,程序是通过知识和经验编写代码和资源,为了改变世界。
对用户来说,程序是 界面、互动以及记忆,用作工具、视频和游戏等用途,通过应用商店、搜索引擎、官网和三方引流等途径下载。
基础组件
界面组件 Activity & Fragment
Activity 界面容器
实现前台交互,作为程序入口和布局容器
需求 - 图片浏览器
-
实现一个图片浏览 APP (Activity + Fragment)
相册页面 + 大图页面 + 调用相机 (Intent)
-
页面架构:Activity + Fragment
-
处理旋转屏幕场景,保证旋转屏幕页面不重建(Activity 生命周期)
-
内置自我升级能力(Service使用)
-
处理首页加载模式,避免页面栈中出现两个首页(单一首页 SingleTask)
-
扫描系统所有图片(ContentProvider)
-
提供图片选择能力给系统(Intent)
基本用法
注册 - 布局文件 - 绑定
在 AndroidManifest 用 标签注册
layout 包下写 .xml
绑定
setContentView()
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
基本用法
生命周期
onCreate():创建时回调,一般在此处创建视图和绑定数据
onStart():已启动,即将进入前台
onResume():与用户开始交互,位于Activity栈顶
onPause():Actvity失去焦点或已暂停,Activity界面部分可见,下一个生命周期是onResume()或onStop()
onStop():Activity不再可见,下一个回调是onRestart()或onDestory()
onRestart():重启已停止的Activity,下一个回调是onStart()
onDestory():销毁Actvity,释放该Activity的所有资源
onSaveInstanceState():在非正常关闭时回调,用于保存数据,不支持持久化数据
onRestoreInstanceState()/onCreate():用于恢复数据
5.0 之前只能在 onPause() 时保存数据, 之后可以在 onStop() 里保存
打开关闭界面
部分遮挡(弹出消息,请求授权等)
完全遮挡
配置改变场景(屏幕旋转)
默认会销毁重建
销毁:Resumed - onSaveInstanceState() - onPause() - onStop() - onDestroy()
重建:onCteate() - onStart() - onRestoreInstanceState() - onResume()
配置改变时不重建 Activity 方法:
AndroidManifest中配置Activity节点的configChange属性
local:语言改变
fontScale: 字体大小改变
orientation:旋转屏幕
keyboradHidden:键盘显示隐藏
配置改变:onConfigurationChanged()
后台回收
接电话 Crash 问题解决方案
页面被回收导致本地变量被置空
解决:
-
增加判空逻辑避免空指针异常
-
在页面回收生命周期中储存数据,页面重建时进行恢复
onSaveInstanceState() 写入要保存的数据
onRestoreInstanceState() 进行数据恢复
启动模式
在查看图片界面点击按钮跳转回主页,默认会新建一个 Activity ,这时一般通过启动模式来进行去重。
有四种启动模式
- standard 默认允许 Activity 重复
- singleTop 不允许连续重复
- singleTask 不允许同个栈内重复
- singleInstance 整个系统不允许重复
通过设置不允许重复来给 Activity 去重。