工作总结

工作交接清单
本清单主要列出本人开发的一些功能模块以及各个开发模块可以进行优化的建议。

1.启动页模块
启动界面是进入APP的第一个界面,主要功能有APP快速启动和Splash欢迎动画功能。

1.1 快速启动:
启动APP应用时会出现短暂的黑屏或者白屏,主要是因为启动APP后系统会创建一个进程运行,但是进程的创建需要一些时间,在这个过程中会开启PreviewWindow的预览窗口,这个窗口的背景是根据清单文件中Launcher界面设置主题决定。

Light为白色,Dark为黑色。

使用Layer-list叠加层,自定义启动的布局样式。

https://www.jianshu.com/p/09b876b865ac

1.2 Splash欢迎动画:
欢迎界面添加动画效果可以让界面更加有趣过度更加平滑;Android动画分为帧动画、补间动画和属性动画。
帧动画是在xml的drawable文件夹中使用标签将连续的图片添加到标签中进行动画的播放。
补间动画使用的是Animation类进行的动画操作,可以在xml文件写动画和java代码中进行控件与动画的绑定播放。

补间动画的效果比较流畅但是拓展性不是很强,只有常用的平移、旋转、缩放、渐变色,不支持自定义view的拓展,还有就是补间动画的动画效果只是在屏幕上绘制,view的实际位置还是在开始的位置,点击view还是在原位置,因此现在用的更多的是属性动画。

属性动画基于Animator类进行的,常用的类有ValueAnimator和ObjectAnimator;属性动画底层使用到的是数值发生器,duration设置过度时间,Interpolator设置插值器控制过度速率;
设置开始值和结束值,通过过度时间和过度的速率得到每一个时刻的数值,通过这个数值可以用于修改view或者自定义view的属性,进行重绘实现动画。

ValueAnimator:需要将得到的数值赋值给View比较麻烦;

ObjectAnimator:可以自动将数值传递给对象屬性,对象的属性需要重写get和set方法,可以直接对对象属性进行操作,是ValueAnimator的子类更加方便;

属性动画中的ofObject()方法需要传入TypeEvaluator评估器对象,有开始、结束值和进度百分比修改这个函数可以对当前的值进行设置。

https://www.jianshu.com/p/2412d00a0ce4

2.登录模块
登录模块主要功能是APP的用户登录、忘记密码找回密码、APP使用协议等界面。
2.1 界面UI
登录界面和其他界面都是根据美工设计图来完成的UI样式,使用的是传统的Android控件,这里可以使用Android推荐的Material Design设计整体样式,也可以使用dataBind进行xml视图与数据的绑定。

翻墙:https://material.io/design/
2.2 权限设置
登录界面需要控制一些APP必须使用到权限,例如读写内存读写权限和其他需要处理的权限,如果用户没有同意开启权限无法进入APP。
2.3 网络请求
对传入的userName和password参数进行校验,然后需要将密码进行MD5加密,密码不能传明文,MD5加密是不可逆的,数据库存的也是加密后的字符串,防止密码泄露。
请求成功初始化相关数据进入主界面;
请求失败提示用户失败原因。
2.4 初始化数据
将得到的响应体String通过FartJson解析框架将json字符串装换为Bean数据对象;使用SharedPreFerences保存到本地数据,用于个人中心等相关数据的使用。这里可以换成数据库保存本地数据。

3.用户中心模块
用户中心模块主要个人账号信息、公司信息、省市县信息显示和修改。这里的UI显示和修改都比较简单,需要注意的是省市县地区的选择处理,
初始从网络上加载City地区对象,这里有一个v版本参数默认是sp存储默认是0,需要网络请求;
初始City地区对象请求成功后显示在UI界面上,并保存到本地;

下次请求 如果有网络,发起网络请求判断版本是否更新,更新就下载最新的city信息;没有更新使用本地缓存的;如果没有网络直接加载本地缓存的。

4.屏幕适配:
4.1 相关知识
Android设备的品牌、机型、尺寸和分辨率众多,导致Android碎片化严重,一套UI设计图和资源图片在不同的的设备上显示的大小尺寸和资源图片质感都不相同。

px:像素屏幕最小显示单位,列:1080*1920 宽1080 高1920 个像素点。
dpi: 为DPI是Dots Per Inch(每英寸所打印的点数)
dp:密度无关像素。标准是160dip密度.即1dp对应1个pixel,屏幕密度越大,1dp对应 的像素点越多。
320*480px分辨率3.6寸的手机的(3.6寸是当时手机最为通用的尺寸)
像素密度 = √宽²+高²/尺寸
dpi = √480²+320²/3.6 = 160 dpi
dp计算公式如:px = dp * (dpi / 160),
dp = px/ (dpi / 160) = 1 /1
屏幕密度越大,1dp对应 的像素点越多。在Android中,规定以160dpi(即屏幕分辨率为320x480)为基准:1dp=1px。

密度类型 代表的分辨率(px) 屏幕密度(dpi) 换算(px/dp) 比例
低密度(ldpi) 240x320 120 1dp=0.75px 0.75
中密度(mdpi) 320x480 160 1dp=1px 1
高密度(hdpi) 480x800 240 1dp=1.5px 1.5
超高密度(xhdpi) 720x1280 320 1dp=2px 2
超超高密度(xxhdpi) 1080x1920 480 1dp=3px 3

dp类似于根据屏幕密度占比的长度单位,密度160dip的屏幕上1dp = 1px,1个dp站1个px像素点的位置; 密度320dip的屏幕上1dp = 2px,1个dp站2个px像素点的位置;因此Android使用dp做控件的长度单位,可以让不同分辨率展示出大致相同的尺寸大小。

720*1280分辨率上
100dp x 2 = 200px, 屏幕宽度的比例 200 : 720 = 1 : 3.6
1080*1920分辨率上
100dp x 3 = 300px, 屏幕宽度的比例 300 : 1080 = 1 : 3.6

https://www.jb51.net/article/127291.htm

通过上面的分析可以看出Android中使用dp单位可以适配主流分辨率常规尺寸的手机,但是有些手机可能是1080*1920分辨率420dip密度这样特别的设备,这样算的1dp=2.6px,260:1080=1:4,导致如果控件宽高还是按照常规的dp大小设置,可能占的宽高大小会不一致。

4.2 项目中的屏幕适配方案:
在Android开发中的适配方式有很多,传统的方式有宽高限定适配符和UI适配框架
1.宽高限定适配符,就是在res文件夹中创建多个不同分辨率的value,在value中设置dimens文件根据上面分辨率设置px,列如:320*480 1px = 1px ;480*800 1px = 1.5px。
2.UI适配框架,是通过得到设计稿的宽高得到斜率的密度值和设备实际显示的宽高得到斜率的密度值,设备实际密度除以设计图的密度得到当前的需要转换的比率,循环遍历ViewGroup里面的控件,得到控件的宽高然后通过比率来转换宽高做适配。这种适配方式在xml布局嵌套较多的文件中比较耗时,而且如果app出现bug,会清空缓存,布局变形。

当前地面站用的就是上面AutoUtils的屏幕适配,1. 感觉在xml使用px值不规范。2. 性能上也不是很好。

我们手机上只用一套dp基本上可以满足大部分的手机,如果要适应平板我的方案是使用sw最小限定符,smallestWidth适配,或者叫sw限定符适配。指的是Android会识别屏幕可用高度和宽度的最小尺寸的dp值(其实就是手机的宽度值),然后根据识别到的结果去资源文件中寻找对应限定符的文件夹下的资源文件。
是在160dip密度1dp = 1px的基础上进行转换的,如果
适配720*1280分辨6.7平板:dpi = √720²+1280²/6.7 = 216 dip
dp = px/ (216/ 160) = 1 /1.5 因此需要将sw216dp中的dp值都乘以1.5进行装换

上面是在调度APP的屏幕适配,根据设备的最小宽度的密度,进入不同dimens.xml选择最合适dp值,目前在使用上还不错。其他的适配方案还有今日头条的适配,是在application中将设配的密度根据设计图密度进行统一的转换,不过对老的项目转化后的UI样式可能发生改变,需要修改测试。

https://mp.weixin.qq.com/s/X-aL2vb4uEhqnLzU5wjc4Q
https://blog.csdn.net/wangwangli6/article/details/63258270/

5.Material Design常用控件:
1.DrawerLayout、Navigation侧滑菜单和侧滑菜单中的item条目,目前我们项目中使用的了DrawerLayout并对DrawerLayout进行了简单触摸事件的修改。

2.CoordinatorLayout协调布局,用于协调子ViewCoordinatorLayout是用来协调其子view并以触摸影响布局的形式产生动画效果的一个super-powered FrameLayout,其典型的子View包括:FloatingActionButton,SnackBar。注意:CoordinatorLayout是一个顶级父View。
CoordinatorLayout原理是有一个被监听的View和其他被标记的View,我们监听这个被监听的View的改变用来触发其他被标记的View的变化。
CoordinatorLayout的内部类Behavior类,可以用它用来标记CoordinatorLayout包裹的子View,其中下面的AppBarLayout、FloatingActionButton等一些动画都继承与她,

实现NestedScrollingParent接口是被监听的View,被监听的View滑动事件来改变标Behavior记View的行为。

3.AppBarLayout是一种支持响应滚动手势的app bar标题布局, CollapsingToolbarLayout则是专门用来实现子布局内不同元素响应滚动细节的布局,包裹在AppBarLayout布局中。在AppBarLayout包裹的子布局可以设置layout_scrollFlags设置它滑动的模式。TabLayout是用来设置便签页的,包裹在CollapsingToolbarLayout布局中。

4.NestedScrollView和RecyclerView是被观察的View,我们通过app:layout_behavior=”@string/appbar_scrolling_view_behavior”来指定他滑动控制AppBarLayout的行为。
5.其他的常用的Material Design还包括FloatingActionButton悬浮的操作按钮,设置layout_scrollFlags也可以控制它的显示和隐藏动画;
6.CardView 卡片布局可以设置卡片的elevation高度、圆角、阴影等Material Design样式风格。
7.使用BRVAH RecyclerAdapter框架开源框架快速开发RecyclerView列表界面,有添加头部、尾部、多布局等常用的布局。https://www.jianshu.com/p/b343fcff51b0

https://www.jianshu.com/p/bbc703a0015e

6.调度监控APP:
6.1 功能模块介绍:

6.2 飞机信息模块分析:
使用的是RxWebSocket开源进行修改,里面使用的就是RxJava+Okhttp+RxLifecycle组合起来实现长连接请求,可以指定间隔进行重连,通序列化进行线程进切换,重发机制和观察者模式进行长连接的数据传递。

被观察者:

被观察者创建时是用ObservableOnSubscribe的subscribe方法发送给观察者:

观察者:得到数据

总结使用RxJava可以方便的进行线程间的切换,加上观察者模式可以一对多的实现异步消息处理,有很多操作符来处理发送的数据。
https://www.jianshu.com/p/d149043d103a

6.3 BaseListFragment
BaseListFragment是所有list列表界面的基类,为子类通过了共有的list列表视图和请求状态显示布局,共有的上拉加载下拉刷新和数据的泛型。
BaseListFragment布局:有共用的标题栏Appbar和RecyclerView,太可以添加material design控件作为共有的控件。
子Fragment只需要继承BaseListFragment重写自己的item布局。
添加SwipeRefreshLayout控制RecyclerView的刷新,
abstract onRefreshData(int page) 子类刷新请求数据;
abstract onRespData(T data) 请求成功传递数据给子类;
abstract baseAdapter getBaseQuickAdapter(List dataList) 子类传入不同的;

ChildFragment 只负责自己的网络请求数据,数据的解析,自己Adapter的数据和item视图关联。

7.Okgo网络请求简析:
网络请求使用的OkGo网络请求框架,基于Okhttp网络请求进行的封装,传入Url,参数和Callback监听。
请求:请求行、请求头和请求头。
响应:状态行、消息报头和相应正文。
Url:服务器接口地址,在请求行中。
请求方法:一共有八种,常用的get和post请求。
参数:get请求的参数在url后面追加,post请求的参数写入到请求头,框架都有封装;
Callback:回调监听。

主要看OkGo、BaseRequest

Okgo这个类里面有一些网络请求的默认配置如:请求超时、刷新、重试时间;缓存模式和设置;请求参数和公共的信息如application;还有Handler控制线程切换:
公共参数的定义:

使用:

Okgo设置get和post等常用的请求方法;使用是只用传入url便可以等到Request请求对象,Request请求对象是负责管理Request相关的信息的,如请求Url、参数、请求配置、标记等信息。
请求方法的定义:

BaseRequest:所有请求的基类,其中泛型 R 主要用于属性设置方法后,返回对应的子类型,以便于实现链式调用。主要是存取了所以请求的相关参数,和请求的执行。
初始化request信息:

生成请求体和请求对象

Get请求:

获取call对象,执行请求方法:

生成Call,execute方法是同步的请求阻塞线程,需要创建工作线程;enqueue是异步的网络请求不用创建子线程。

cacheCall:带缓存的网络请求,将BaseRequest对象传入,设置和获取相关的缓存信息然后根据缓存策略进行网络请求。

执行网络请求:

Okgo有一个(Delivery)Handler 用于控制主线程和子线程的切换;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值