Android项目实战总结

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.二维码
  • 二维码介绍 http://iluhcm.com/2016/01/08/scan-qr-code-and-recognize-it-from-picture-fastly-using-zxing/
16.优化App
  • 启动页面的闪屏: http://www.jianshu.com/p/672d9bbbf684

  • (待完成)动画推荐:稀土掘金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

你可能感兴趣的:(Android项目实战总结)