Andriod知识图谱|青训营笔记

131 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的的第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的工作原理。