【开发经验】安卓随记

2018-09-02  本文已影响22人  Geeny

1. Gson实现拷贝一个类实例的数据

在Java中,一个变量持有一个实例对象时,其实这个变量是引用了这一块数据的内存数据。当我们把这个变量赋值给另一个变量时,传递的只是实例对象的数据内存地址。也就是说,之后这一个内存地址对应的数据一旦变化,两个变量的“数据”看起来也是一起变化的。

如果要实现拷贝一个对象的数据给另一个变量,有不少方法。其中之一可以用Gson互转,如下。

2. View的Tags可用于无障碍模式下的视图朗读

一个View的Tags不能作为一个View的标识,但可以对View进行备注和分类。在开发中,如果要让应用支持视障人士的使用,可以对每个View加入对应的Tags,在无障碍模式下,系统将会朗读这些标签供视障人士理解界面内容。

3. RecyclerView中实现头部或底部

如果只是实现头部和底部,中间的Item内容一致,可以利用onBindViewHolder方法参数中的position判断(0和最后一个位置),然后绑定对应的item视图。这种情况没有必要修改数据源的结构,防止一些数据错位和数据混杂的bug出现。

4. RecyclerView中实现Item内容多样化

可以建立一些viewType类,这些viewType类分别实现了每个Item类型的onCreateView、onBindViewHolder和getType方法,在RecyclerView的Adapter中存入viewType集合,最后通过位置和数据元素的类型来决定走哪个viewType的onCreatet、onBindViewHolder方法。核心思想就是——根据Item类型分离Adapter的onCreateView、onBindViewHolder方法。

5. 面向对象中单一职责原则的理解

“一个类仅有一个职责”或者“引起类变化的只有一个原因”

一个类应该在逻辑上完成一个分类上的工作职责。

比如一个Person接口,有吃早餐、吃午餐、吃晚餐、跑步和游泳五个方法,但明显,**前三个是关于吃东西,后两个关于运动**。

如果从单一职责原则上考虑,我们应该让Person类继承Eat和Sport两个接口,吃早餐、吃午餐、吃晚餐三个方法放入Eat接口,跑步和游泳放入Sport接口中。

6. Layout文件中,用tools xml命名空间域实现视图的预览功能

7. 对于Module之间的隐式调用、跳转,可以考虑用 Alibaba 开源的 ARouter

一个用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦。

类似Java Web的URL响应

8. 对于一些需要保密的界面,我们通过禁止截屏和录屏来保护信息。

在Activity中设置Window的FLAG_SECURE标志即可实现界面不允许截屏和录屏(在setContentView方法之前)。

9. Layout文件中,DataBing赋值里的字符串用``符号包住

10. Drawable根据分辨率匹配资源文件时的顺序

如果APP找不到对应精度的Drawable文件,会优先向精度更高的资源文件匹配,如果还匹配不到,则再向精度较低的匹配。比如mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi五种精度,xxhdpi的手机跑APP时需要A图片,就去Drawable-xxhdpi文件夹中找到A图片,匹配不到后,从其它资源文件夹寻找,顺序依次是xxxhdpi ->xhdpi -> hdpi -> mdpi。

此外,APP应用图标最好放到mipmap文件夹下,其余图片资源放在drawable文件夹下。

11. 搭架构或做大型工作时利用TODO

当我们做大型工作(比如搭建框架或重构时),暂时不能因为执着于细节而停滞代码实现的主线。这时候,我们可以借用IDE里的TODO功能,把待完成但不是急需完成的工作标记起来,之后做好了重要的代码框架,再去完成之前留了TODO的细节,使工作主次分明。

12. 创建String资源值更快的一种方法

我们知道,界面上给用户看的字符串要用String Resource文件统一管理。实际开发中,如果写layout时中途需要用到一个String,我们要从layout文件跳到String文件加一个String资源,再回来layout文件里用这个String,还需要记住刚刚新建的String的大概名字。

更快的方法有:直接在layout写我们要命名的String名字,然后IDE会标错(当然,因为目前没有这个String)。

这时候按补错快捷键。

直接补String的值。

就可以快速新建一个String了(新String默认放在String文件的最后,需要整理的话稍后再统一分类),比原来的方法方便很多。

13. 用Charles工具模拟服务器数据

Charles的Tools->local map有这样的功能。它可以在本机请求某条API时,模拟服务器对这个请求进行响应并返回对应的数据(Json)。这样,在没有服务器后台的情况下,我们也可以实现网络请求的测试。

14. 开发时对输入内容重复的地方可以考虑把内容写死

比如在做登录功能时,频繁使要输入账号和密码,这并不是很高效的方法。可以在开发中直接把账号密码写死,运行时直接点登录就可以了。

15. 使用Gsonformat插件对Json转为Java实体类

16. 前端API一旦确定进入开发,就不要再改字段名和类型了,即使是最初命名错了

17. 应该在需求分析和设计阶段列出所有API,而不是等到产品确定后边做前端开发边做后台API实现

上一篇下一篇

猜你喜欢

热点阅读