经验分享

1. 流行技术

  1. 框架:MVP(框架) + Rxjava(响应式编程) + Retrofit(网络请求封装)
  2. 常用三方库:
    • Rxbus :事件订阅管理
    • ButterKnife :view 注入框架(setting 设置 m 开头)
    • fastjson/Gson :Json 处理工具
    • glide/Fresco :图片加载组件
    • PictureSelector :图片选择器
    • zxing :二维码扫描
    • Lifecycle :生命周期管理组件
    • tinker :热修复组件 使用
    • Android-PickerView :多功能选择框(时间、地点、文件等,支持单选多选)
    • AndPermission :权限管理组件
    • SmartRefreshLayout :上拉加载、下拉刷新
    • material-calendarview :日历控件
    • SwipeDelMenuLayout : 侧滑菜单
    • banner :广告轮播图
  3. 常用三方工具:
    • 友盟统计、友盟分享、第三方登录
    • 百度/高德地图、定位
    • 极光推送
    • 微信支付、支付宝支付
    • Bugly 异常上报和运营统计
    • leakcanary 内存检测工具
    • ViewServer 可使用可视化界面显示工具
  4. 语言:
    • java、kotlin(官方 kotlin 上位,但是 java 短时间也不能淘汰)
  5. 其他:
    • React Native :跨平台解决方案,但目前属于踩坑阶段。
    • Hybrid :混合开发,Android 的壳 + webview 页面,可服务器直接更新,但是加载受网络限制,超级耗流量。
    • dagger2 :依赖注入框架(通过注解注入对象,在预编译的时期,非反射),上手成本超高。
    • MVVM :也是一种新的架构模式、数据和 view 双向绑定,但绑定后 view 复用性差。

2.技术栈

  1. 架构的演变:MVC -> MVP、MVVM。

    我们前公司架构使用的 MVP ,划分比较狠一些,就是 activity/fragment 中只有 view 更新,其余的所有操作全在 presenter 中(包扩跳转、onActivityResult 的处理),中间使用接口定义规范,这样做的好处就是 view 的页面可以直接复制去使用,不一样的逻辑全部都在 presenter 中去修改,我们的同业客户端(toBC)和旅游客户端(toC)在页面展示上几乎没有区别,区别就在于逻辑的处理,可以根据订单进行返佣操作。

  2. 网络请求、数据解析

    最开始使用的是 httpurlconnection ,通过流的方式去处理数据,后期有 volley、xUtils,在后来 okhttp 出现,使用的是 OkGo(那时候还是 MVC 模式)、在后来就是现在的 MVP + Rxjava + Retrofit。

  3. 页面、动画

    想要做一个动画的过程:先把你需要动的 view 先画出来,然后通过 动画 让他动起来,最后在加上手势判断,添加逻辑。

    • 画出来:
    • 动画 :属性动画(Property Animation)、视图动画 (View Animation)。
      • 设置动作:平移、旋转、缩放、渐变。
      • 设置属性:时长、重复规律、速度拦截器(匀速、加速、减速、回弹等,也可自定义)
      • 特殊场景:ArgbEvaluator 颜色渐变、自定义 Evaluator(设置起始值、根据动画完成度,自行定义函数),
      • 复杂场景:使用 AnimatorSet 来同时管理调配多个动画;

    Android动画

    扔物线关于 view 的专栏

  4. 优化:页面、内存

    • 页面:过度绘制、边界布局。
      • 过度绘制(Overdraw):开发者模式,调试 GPU 过度绘制。
        • 移除默认的 Window 背景
        • 移除控件中不必要的背景
        • 减少布局文件的层级(嵌套)
      • 边界布局
        • Hierarchy View 工具
      • 尽量让布局扁平、减少嵌套、RelativeLayout 代替 LinearLayout、使用 include、merge 等标签 。
    • 内存:溢出、泄漏。
  5. 安全: 安全这里接触的比较少,一般就是代码混淆,加 360 加固。

  6. 其他:

    • webview 交互:坑多、很多个性的问题。
    • 页面适配:文件适配,算好各种分辨率文件,放到资源文件中,通过@dimen/..引用。
    • 新控件: 新控件
  7. 代码管理:

3.经验踩坑

  1. java 的值传递。引用数据类型和基本数据类型在当作参数传递时、要时刻明白传递的是地址值,还是值,对数据进行修改时,会不会改变值。

使用滚轮的三方库,传入 list,在回调中根据返回的 position 取值发现 list 数据变了,在他的代码里发现他是直接进行了赋值操作,在滚动时对 list 进行了修改导致。

  1. 启动模式 singleTask 。

在重新开启页面的时候,不会走 onCreate 方法,会走 onNewIntent 方法。

  1. 没什么特殊情况的话,在 build.gradle 中最好使用指定版本。

高德地图 : 使用的是最新版本,恰巧使用 tinker 打补丁包,发现包大了 20 多兆,查找发现因为使用的是 last 版本,自动更新了,最后改回指定版本。

  1. 学会换位思想,可以减少沟通成本。

开启你的 activity 需要带哪些参数,可以在你自己的类里面写开启的方法,把参数带上。

  1. 使用重载方法,解决参数数量变化的问题。

分享功能:酒店分享新添加出入店时间,利用重载方法添加参数,省去修改其他掉用方法。

  1. 尽量和 ios 端统一变量和逻辑。

这个坑实在是太多了,历史记录最开始是本地保存,我和 ios 各写各的,后来需求开了,需要同步后台,发现我们本地数据类不同,又做的适配。活动页面,从列表进入详情,ios 列表判断是否过期,我进入详情后判断,造成了逻辑不统一。

  1. xml 中 include 相同的文件。

只有最上面的布局才会被注入到 activity 中,下面的布局需要手动 findviewbyid。做悬停页面的时候,通过 include 引入两个相同的页面。

  1. getTop()的方法获取的高度是相对于父布局。

邮轮的详情页面,添加产品下线时,展示推荐产品功能,布局进行嵌套(为了显示和隐藏),高度对不上,悬停错误。

  1. popupwindow 嵌套 edittext时,无法使用粘贴功能,系统bug。

处理:换成 dialogfragment 代替。弹窗查询手机号。

  1. popupwindow 中 edittext 无法获取焦点。

在 new popupwindow 的时候在构造时,选择为 true。

  1. view 实例化,最好使用LayoutInflater.from(mContext).inflate(getResId(), parent, false)

参数介绍

  1. 使用 NestedScrollView 代替 Scrollview ,防止滑动冲突,以及嵌套 RecyclerView 的显示不全。
  2. 引导页面点击或者滑动进入,取消点击按钮。

setOnTouchListener 重写 onTouch 方法,进行手势就判断拦截。

  1. 机票日历选择页面,点击自动定位到中间位置。

重新设置 LayoutManager 中 smoothScroller 的 calculateDtToFit 方法实现。

  1. 7.0 的新特性的 apk 下载后的升级安装。

7.0 以后禁止向你的应用外公开。 Android7.0新特性,及Android N适配

  1. TextView 和 SpannableStringBuilder。

    有一些样式、间距等完全可以使用 TextView 和 SpannableStringBuilder 去实现。 比如:设置行间距、行数、超过指定字数以 "..." 结尾、设置折叠、字体居中。 只用一个 TextView 实现字体大小不同、颜色不同、加粗、删除线等。

其实你不懂:Android之TextView 不常用的几个方法

【Android】强大的SpannableStringBuilder

  1. RecyclerView 复用的问题。

item 的状态、图片错乱这个比较常见,好解决。

酒店的房间列表,属于列表套列表,最开始数据全部返回,加载列表,没有问题。 后期列表的子列表改成单独接口访问,这就需要更新操作了,问题也就来了,列表的item notifyDataSetChanged 会产生新的 item 对象,新的 item 没有绑定 adapter ,刷新无效,但是我的子 item 显示隐藏还必须要刷新,就只能手动更新,不使用 notifyDataSetChanged。

  1. view.gone 和 invisiable 的区别。

在 RelativeLayout 中,两个 view 有依赖关系,当一个 view gone 时,另一个 view 就找不到依赖,位置就乱了。

  1. onWindowFocusChanged 方法里面去获取高度。

需要测量 view 的时候,onCreate 获取不到,页面还没有绘制完。

  1. notifydatechange 是在子线程进行更新,需要时间。

notifydatechange 之后直接调用滚动方法,可能位置会有问题。ScrollView 嵌套 RecyclerView 时,更新后,要通过 ScrollView 定位。

  1. ScrollView 滑动过快回调会不及时。

做一些悬停渐变的操作时,要在上下边界重新设置位置或渐变度。悬停和渐变。

  1. webview 和 h5 同步浏览器测试需要设置代码。
//用于同步浏览器调试
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    WebView.setWebContentsDebuggingEnabled(true);
}
复制代码
  1. popupwindow 里如果使用的 listview 添加分割线时,在高度计算时,要添加上。
  2. textview 设置 drawable,更换图片。
Drawable drawable = getResources().getDrawable(R.drawable.signdown);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
复制代码
  1. 页面添加悬浮按钮时,最好单独写 view 非侵入的 xml,在使用时,直接 new 出来,add 进页面。否则需求改动,你就哭了。
  2. webview 交互 h5 时的数据类,需要包装。
var jsonStr = JSON.stringify(str);
复制代码

在接收的时候需要去除 "/"。 27. 预览 pdf 跳转浏览器,Android webview 没有 ios 的强大。 28. RecyclerView 的 adapter 如果有 if 一定要不全 else 否则会发生错乱。 29. 简单的列表建议使用 LinearLayout addview 使用。 31. 机票列表的数据和经停数据不在一个借口中。

列表一个接口,经停数据需要再次访问,访问后使用 map 存储,减少请求时间。

  1. 使用代码主动去调用控件的点击事件(模拟人手去触摸控件)

performClick方法

  1. TelephonyManager 使用时,第一次会走无任何状态的回调,TelephonyManager.CALL_STATE_IDLE:

添加 一个 变量,第一次走逻辑。

  1. realm 与 新大陆打印之间的 so 冲突。so 的过滤。
  2. 屏蔽 home 按键引发的 Window type can not be changed after the window is added 问题
  3. dialogfragment 显示弹窗 中间有padding link
  4. edittext 设置整数和小数 android:inputType="numberDecimal|number"
  5. android rsa 与 java rsa 加密不同 link

4.规范

  1. Android 开发规范 :Android 开发手册
  2. 阿里巴巴 java 插件 :java 开发规约插件
  3. 版本控制规范:使用 GIT FLOW 管理开发流程

5.小技巧

  1. tips:
    • ctrl + p :查看方法的传入参数
    • ctrl + e :查看最近打开的文件
    • F2:快速跳转到报错的代码
    • alt + 数字键 :快速打开对应数字的侧边栏
    • ctrl/ctrl + shift + r :当前页面/整个项目查找替换
    • ctrl/ctrl + shift + f :当前页面/整个项目搜索
    • ctrl + shift + f :生成成员变量。
    • shift + f6 :重命名。
    • alt + m :提取方法(我改键了)
    • alt + i : generate 的弹窗
  2. 代码模版 :类似新建 activity 可以直接将 MVP。 所需要的类全都生成出来,不用一个一个新建。
  3. 阿里巴巴矢量图库
  4. tinypng图片压缩

6.其他

  1. 文案排版:中文文案排版指北
  2. 在学习技术之外,最好能在掌握其他的知识,比如:产品、运营
  3. 给大家推荐几本书:
    • 社科类:《影响力》、《乌合之众》(心理学)、《启示录》(产品)、《原则》、《穷查理宝典》
    • 技术类:《24 种设计模式介绍与 6 大设计原则》、《重构》、《大话设计模式》、

转载于:https://juejin.im/post/5be9274ae51d454e0a1cc1f9

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值