客户端基础知识必备 课堂笔记01 | 青训营笔记

276 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第3天

客户端基础知识必备 课堂笔记01

认知方法

What Why How

对开发者来说,程序是通过知识和经验编写代码和资源,为了改变世界。

对用户来说,程序是 界面、互动以及记忆,用作工具、视频和游戏等用途,通过应用商店、搜索引擎、官网和三方引流等途径下载。

基础组件

界面组件 Activity & Fragment

Activity 界面容器

实现前台交互,作为程序入口和布局容器

需求 - 图片浏览器

  1. 实现一个图片浏览 APP (Activity + Fragment)

    相册页面 + 大图页面 + 调用相机 (Intent)

  2. 页面架构:Activity + Fragment

  3. 处理旋转屏幕场景,保证旋转屏幕页面不重建(Activity 生命周期)

  4. 内置自我升级能力(Service使用)

  5. 处理首页加载模式,避免页面栈中出现两个首页(单一首页 SingleTask)

  6. 扫描系统所有图片(ContentProvider)

  7. 提供图片选择能力给系统(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() 里保存

打开关闭界面

Activity打开关闭界面生命周期.png

部分遮挡(弹出消息,请求授权等)

Activity部分遮挡和恢复界面生命周期.png

完全遮挡

Activity全遮挡和恢复界面生命周期.png

配置改变场景(屏幕旋转)

默认会销毁重建

销毁:Resumed - onSaveInstanceState() - onPause() - onStop() - onDestroy()

重建:onCteate() - onStart() - onRestoreInstanceState() - onResume()

配置改变时不重建 Activity 方法:

AndroidManifest中配置Activity节点的configChange属性

local:语言改变

fontScale: 字体大小改变

orientation:旋转屏幕

keyboradHidden:键盘显示隐藏

配置改变:onConfigurationChanged()

后台回收

接电话 Crash 问题解决方案

页面被回收导致本地变量被置空

解决:

  1. 增加判空逻辑避免空指针异常

  2. 在页面回收生命周期中储存数据,页面重建时进行恢复

    onSaveInstanceState() 写入要保存的数据

    onRestoreInstanceState() 进行数据恢复

启动模式

在查看图片界面点击按钮跳转回主页,默认会新建一个 Activity ,这时一般通过启动模式来进行去重。

有四种启动模式

  1. standard 默认允许 Activity 重复
  2. singleTop 不允许连续重复
  3. singleTask 不允许同个栈内重复
  4. singleInstance 整个系统不允许重复

通过设置不允许重复来给 Activity 去重。