app是一项工程,需要事无巨细的精益求精,把每个细节优化到极致就是完美!
一.开源框架及其他
1.retrofit
简介:A type-safe REST client for Android and Java
- 可以多个rest共存
- 服务器接收图片的问题
- 遇到的问题:使用rxjava后获取头部信息的问题
- 获取bitmap ,用来下载图片
- 返回的数据不确定的话 ,用Object来解析
- https证书:http://www.jianshu.com/p/4e849044f97e 或http://blog.csdn.net/lmj623565791/article/details/48129405
2.rxjava
简介:异步链式调用,多个语言支持
案例(RxJava2):https://github.com/amitshekhariitbhu/RxJava2-Android-Samples
- 抛物线:http://gank.io/post/560e15be2dca930e00da1083
- 实战:http://blog.csdn.net/dd864140130/article/details/52714272
- rxbus,取代了EventBus
- 表单验证,结合databinding使按钮的控制:https://github.com/TangoAgency/android-data-binding-rxjava
- 1.升级到2.,推荐:https://gold.xitu.io/post/58807ef92f301e00697f6ad8
3.glidle
简介:谷歌推荐的图片加载
- http://blog.csdn.net/shangmingchao/article/details/51125554
- http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0823/3353.html
- 结合rxdatabinding使用,参考了美恰的封装
- 遇到的问题:圆形图片的首次不显示,图片设置Tag失败
4.realm
简介:通吃ios,android平台。
官网一些咨讯(有大神哟):https://realm.io/cn/news/
- Realm的加密
- Realm的实例获取后,一定要关上
- Realm数据改变需要在beginTransaction后commitTransaction;
- 遇到的问题: 数据库版本更新的问题
5.databinding
简介:谷歌的mvvm的实现
优点:官方推荐,秒杀ButterKnife
教程:慕课网大帅-MarkZhai
- 不会影响效率:因为编译的时候生成了binding文件
- 减少了findViewById,可以少定义id
- xml处理一部分逻辑
使用 - xml文件编译后生成的文件名,id自动生成的文件名称
- xml中绑定数据
- xml中includle布局
- xml中绑定点击事件
- xml中表达式的使用
- xml中双向绑定数据,修改数据,地址
- 可以减少自定义view
- 自定义@BindingAdapter图片的绑定,多次点击的处理
- 遇到的问题: 编译不通过,一定要从日志的最后面找起,大部分是自己写法不对
- EditText 双向绑定数据, String类型的数据双向绑定OK,但是int 类型的就不行
6.自定义view
- 评分条:https://github.com/eugeneek/SmileBar
- 加载Html的TextView:
7.webview
- js交互,支付宝支付,微信支付
- 拨打电话
- cookie的添加: http://www.jianshu.com/p/17054c21dd78
- cookie添加后,网址重定向,cookie的丢失,需要写死url,并改写shouldOverrideUrlLoading返回false,设置要设置到domain根地址下面
- 大部分是在shouldOverrideUrlLoading截取url来操作
- 加载视屏的黑屏问题
- 加载html文件的头部文件的适配
- 图片的点击js添加
- SwipeRefreshLayout和webview的配合
8.RecyclerView
- 列表:https://github.com/jianghejie/XRecyclerView
- 原生的1.2.7版本无法添加footer,改写
- 不支持改变头部和底部的颜色,改写
- 原生的adapter的通知方法有问题,改写
- 原生的头部不会打开页面就下拉,改写
- 升级到25.0.0后,使用25.0.0会产生crash,Scrapped or attached views may not be recycled. isScrap:false isAttached:true,(RecyclerView.java:5420),自己的onCreateViewHolder方法有问题
- 结合google的案例封装:https://github.com/googlesamples/android-architecture
- 魅族手机上RecyclerView嵌套进scrollowview,失效问题,listview取代
9 .fresco
优点:FaceBook大量使用
中文翻译:https://www.fresco-cn.org/
- 圆角图片的显示
- SD卡图片的显示
- 资源图片的显示: http://blog.csdn.net/wang8651971/article/details/45625705
- asset文件下图片的显示:http://blog.csdn.net/wang8651971/article/details/45625705
- 获取bitmap,已解决
- 结合photoview做图片放大: https://github.com/ongakuer/PhotoDraweeView
10.JPush
- 5.0通知图标白色:
http://docs.jpush.io/client/android_tutorials/#_11
http://blog.csdn.net/zhaizu/article/details/50550815
BasicPushNotificationBuilder builder = new BasicPushNotificationBuilder(this);
boolean isAboveLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
//修改状态栏的图标,很关键
builder.statusBarDrawable = isAboveLollipop ? R.mipmap.logo_jpush_white : R.mipmap.logo_jpush_normal;
//设置为自动消失和呼吸灯闪烁
builder.notificationFlags = Notification.FLAG_AUTO_CANCEL;
// 设置为铃声、震动、呼吸灯闪烁都要
builder.notificationDefaults = Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE;
//这样做只会修改状态栏的图标,不会修改notification的
smallIconJPushInterface.setDefaultPushNotificationBuilder(builder);
11.微信分享
- 分享前检查是否安装了微信App
- 可以分享九宫图片
- 分享的图片< 32KB
public static byte[] WeChatBitmapToByteArray(Bitmap bmp, boolean needRecycle) {
// 首先进行一次大范围的压缩
ByteArrayOutputStream output = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, output);
float zoom = (float)Math.sqrt(32 * 1024 / (float)output.toByteArray().length); //获取缩放比例
// 设置矩阵数据
Matrix matrix = new Matrix();
matrix.setScale(zoom, zoom);
// 根据矩阵数据进行新bitmap的创建
Bitmap resultBitmap = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
output.reset();
resultBitmap.compress(Bitmap.CompressFormat.JPEG, 100, output);
// 如果进行了上面的压缩后,依旧大于32K,就进行小范围的微调压缩
while(output.toByteArray().length > 32 * 1024){
matrix.setScale(0.9f, 0.9f);//每次缩小 1/10
resultBitmap = Bitmap.createBitmap(
resultBitmap, 0, 0,
resultBitmap.getWidth(), resultBitmap.getHeight(), matrix,true);
output.reset();
resultBitmap.compress(Bitmap.CompressFormat.JPEG, 100, output);
}
return output.toByteArray();
}
12.状态栏的颜色
- 使用了 https://github.com/laobie
- BaseActivity的代码的判断变多了,是个需要解决的问题
- 为了兼容4.4
13.EditText
- str.trim():去掉字符串首尾的空格。
str.replace(" ", ""); 去掉所有空格,包括首尾、中间 - 有些地方需要输入验证:
http://blog.csdn.net/u013904672/article/details/51303008
http://www.cnblogs.com/zxin/archive/2013/01/26/2877765.html
14.消息通知机制
- RxBus,ABC 跨界面的,D通知ABC页面
- onActivityForResult,A启动B,B回传消息到A
15.二维码
16.优化App
-
(待完成)动画推荐:稀土掘金searchAirbnb的團隊的lottie
-
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 扫码页面加了这句后,再次扫码,导致activity 变黑
-
使用https://github.com/lzyzsd/JsBridge,android4.4 报 chromium报no method 'assign'的BUG http://www.fackyou.org/archives/nodejs/2017050424.html
https://github.com/AlexDisler/cordova-plugin-inapppurchase/issues/9
二.打包Apk
- 记得使用:compile 'com.android.support:multidex:1.0.1'
- 所有的model是否实现了Serializable或者Parcelable — 因为在本项目中,使用了okhttp上传数据,如果不实现了Serializable,服务器将收不到数据。
- 是否删除了不不要的资源目录,as自带 Refactor--Removed Unused Resourses
- 安卓 vector的小批量使用,替换不必要的icon
- 压缩png大小 https://tinypng.com/
- Android Studio 2.3里面的转webjpg格式
三.测试Apk
- 电脑推荐OkHttp+Stetho+Chrome调试http://www.cnblogs.com/peiandsky/p/4394779.html
- 手机推荐OkHttp+Chuck调试
https://github.com/jgilfelt/chuck - 多机型测试
- 显示问题,BigDecimal用来结算,解决小数点的精确问题(支付的时候,显示订单金额的时候)
- 功能测试
- 断网测试
四.上传市场
- 使用了360加固后的apk,部分手机安装成功:nubio 乐视,部分会点开闪退:魅 族pro6,华为
- 应用宝很快的通过
- 版本控制:http://mp.weixin.qq.com/s/NGgTISnxYRHPW4aWwUXLUg
网友评论