客户端基础知识| 青训营笔记

77 阅读2分钟

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

1、从四个角度看,安卓的四大组件有

1.1界面组件 :Activity & Fragment
1.2服务组件 :Service
1.3广播组件 :Broadcast
1.4数据组件 :ContentProvider & ContentResolver

image.png

1.1、为什么使用Activity

前台交互、程序入口、布局容器

image.png

相册列表页:GridView + Adaptor
相册图片页:GridView + Adaptor
大图页:Viewpager + Adaptor

image.png

2、安卓5.0之前的版本,保存数据在只能在onPause()进行,安卓5.0之后系统调整了生命周期回调的一个逻辑,我们就可以在onStop()里面进行数据的保存。onDestroy()不一定能走到,系统回收的时候可能会被直接杀死。

image.png

3、请求权限让你授权,这个时候使用Activity就会出现部分遮挡。

image.png

1、部分遮挡 2、遮挡恢复

4、页面全遮挡

image.png

1、页面全遮挡 234、遮挡恢复

5、配置改变场景,比如相册的适配旋转屏幕需求

1、销毁:Resumed - onSavelnstanceState() - onPause() -onStop() - onDestroy()
2、重建: onCteate()- onStart() - onRestorelnstanceState() - onResume()

6、配置改变不重建Activity : AndroidManifest中配置Activity节点的configChange属性

local :语言改变
fontScale :字体大小改变
orientation :旋转屏幕
keybordHidden :键盘显示隐藏

配置改变:onConfigurationChanged()

提醒配置发生了改变

7、解决接电话Crash问题

问题原因:页面被回收导致本地变量被置空

问题解决:

1添加判空逻辑避免空指针问题
2在页面回收生命周期中储存数据,页面重建时进行恢复onSavelnstanceState()中写入需要保存的数据
onRestorelnstanceState()进行数据恢复

8、Activity (启动模式-standard )

standard :默认模式,允许重复
singleTop :不允许连续重复
singleTask :不允许同个栈内重复
singlelnstance :整个系统不允许重复

image.png

9、解决多个首页问题

问题:加入首页按钮后,点击会在当前页面加入首页,返回后首页会消失。

解决:将首页launchmode设置为singleTask

10、Fragment设计是为了处理碎片化,常见的两个方面:

1、把不同的页面用Fragment重载(速度快
2、做一部分的组件分离

11、Fragment (生命周期)

image.png 12、Fragment总结

image.png

13、ContentProvider(基本用法)

生产者
1 注册:AndroidManifest中使用<provider.../>
属性: authorities / exported / readPermission / writePermission
2 创建:建立相应的ContentProvider实现类
方法:onCreate / getType / insert / delete / update / query

14、扫描系统现有图片

image.png 15、Intent 意图

image.png

16、Intent(系统能力)

电话:Intent(Intent.ACTION_DIAL, Uri.parse("tel:10010"))
短信:lntent(Intent.ACTION_SENDTO, Uri.parse("smsto:10010"))
网页:lntent(Intent.ACTION_VIEW, Uri.parse("https://www.baidu.com"))
邮件:Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:someone@domain.com"))
地图:Intent(Intent.ACTION_VIEW, Uri.parse("geo:39.9,116.3".))
拍照:Intent(MediaStore.ACTION_IMAGE CAPTURE)
设置:Intent(android.provider.Settings.ACTION_SETTINGS)
市场: Intent(Intent.ACTION_VIEW, Uri.parse("market:/ldetails?id=" + packageName))

使用:startActivity(intent)

17、总结-基础组件

Activity 界面容器
Fragmen 轻量界面容器
Service 后台服务
BroadCast 广播组件
ContenProvider 数据组件
Intent 意图组件

通信组件和控制组件的总结:

image.png

image.png