美文网首页安卓 精品收藏
Android项目实战总结

Android项目实战总结

作者: 小张呵呵 | 来源:发表于2016-10-14 16:24 被阅读176次

    app是一项工程,需要事无巨细的精益求精,把每个细节优化到极致就是完美!

    一.开源框架及其他

    1.retrofit

    简介:A type-safe REST client for Android and Java

    2.rxjava

    简介:异步链式调用,多个语言支持
    案例(RxJava2):https://github.com/amitshekhariitbhu/RxJava2-Android-Samples

    3.glidle

    简介:谷歌推荐的图片加载

    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
    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/

    10.JPush
    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.状态栏的颜色
    13.EditText
    14.消息通知机制
    • RxBus,ABC 跨界面的,D通知ABC页面
    • onActivityForResult,A启动B,B回传消息到A
    15.二维码
    16.优化App

    二.打包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

    四.上传市场

    相关文章

      网友评论

        本文标题:Android项目实战总结

        本文链接:https://www.haomeiwen.com/subject/aapkyttx.html