这是我参与「第四届青训营 」笔记创作活动的的第2天
今天的直播课主要讲的是Andriod的基础组件,是昨天关于客户端的一个收敛, 学习的目的主要是在做相关的功能时能够进行拆解,两天的直播课的感受就是大佬都有比较强的总结归纳能力。 先看大方面,再收敛到局部。
一、对程序的理解
1.开发者视角
(1)What
资源+代码
(2)Why
改变世界(对我来说能让世界有一点不一样就行。)
(3) How
知识+经验:创造的过程
2.用户视角
(1)What
界面:我能看到什么?
交互:我能做些什么?
eg.抖音能看到视频的播放界面,用户能选择喜欢的视频进行播放,也可以点赞和收藏。
(2)Why
功能:我能用它解决什么问题?
eg.解决碎片时间的利用问题(人性里对信息的焦虑)。
(3)How
如何获取,各种下载途径。
获取已经有点东西。
产品经理是能够从两个角度考虑问题的人,好的开发也应该有产品思维。
3.实际案例 (1)What———图片浏览器
能够选择图片显示;
能够适应旋转场景;
能够调用相机;
能够选择图片给系统。
(2)Why
图片显示——基础功能;
旋转场景——终端的灵活性;
调用相机——很多时候和相机是一起的;
选择图片给系统——APP的功能扩展。
(3)How
图片显示——基础功能;(Acyivity+Fragment)
旋转场景——终端的灵活性;(与Activity生命周期)
调用相机——很多时候和相机是一起的;(Intent)
选择图片给系统——APP的功能扩展(Intent)。
二、基础组件
1.Activity
(1)What:界面容器
前台交互——程序入口——布局容器
用户角度——连接桥梁——程序员角度
(2)Why
需要有界面对所有的组件进行统筹兼顾。
(3)How
-
使用流程:注册——布局——绑定
-
生命周期:理解整个完整的流程图,所有的应用都是在此基础上的变形。
按函数分类、按遮挡情况分类、按配置变更情况进行分类、按后台回收情况进行。
问题:
Activity可见性:什么时候可见(onResume())什么时候会被部分遮挡(onPause())什么时候完全不可见(onStop())
数据存储:什么时候绑定数据(onCreat())什么时候保存数据onPause()还是onStop()看版本。
eg.接电话Crash问题
原因:活动流程被打断,由于对打断前的数据保存不完整所以导致无法继续活动。
解决:添加判读(提示作用)、在页面挥手生命周期中存储数据页面重建时进行恢复(onSaveInstanceState()&onRestoreInstanceState())
- 启动模式:按照栈顶活动的种类以及栈内活动的种类进行划分
standard:允许重复
singleTop:不允许连续的重复
singleTask:不允许同个栈内重复
singleInstance:整个系统不允许重复(使用场景,银行app的登录界面)
eg.加入首页按钮后,点击会在当前页面加入新首页,返回后首页会消失。
原因:默认是标准模式
解决:点击首页按钮回到首页,将Launchmode设置为SingleTask
2.Fragment
(1) What
精简版的Activity
(2) Why
碎片化:一个页面可以承载很多东西,进一步划分有助于程序设计;
组件分离:Fragment 的运行速度也会更快一些。
(3) How
-
使用流程:注册——布局——绑定
-
生命周期:多了和Activity绑定和解绑的过程,重点学习Fragment与Activity的交互
组件获取:getActivity().findViewById(R.id.xxx);getFragmentManager.findFragmentById(R.id.fragment_xxx) 数据传递:Activity->Fragment setArguments(Bundle bundle)、Fragment->Activity通过对象调用的方式传递、通过viewmodle、handler、broadcast、eventbus通信。
3.service
(1) What
允许在后台运行的活动。
(2) Why
作用用于后台运行的任务
(3)How
-
使用流程:注册——创建——加载
-
生命周期:重要的是和Activity通信,什么时候开始什么时候停很重要,避免内存泄漏问题。
4.BroadCast
(1) What
无论当前是什么活动都能收到系统发生的消息。
(2) Why
来自系统的高优先级信息
(3) How
- 使用流程:注册——创建——接收——发送。
这些学习模式都差不多,其他还有ContentProvider()、Intent()的用法。
三、通信组件
1.Handler:对线程通信
本质是一个消息队列,looper循环对队列中的消息的处理。
2.Binder:进程间通信
理解进程之间内存相互独立,就能比较好理解Binder的工作原理。