美文网首页安卓 精品收藏
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