扩展阅读:
在JSON反序列化一文的最后,有提到,如果有1M的JSON文本应该如何来解析?
1M的JSON String,不管用GSON,fastjson,jackson,估计都要OOM了吧。本来我想说200M的JSON数据的,想想这太坑了,就改说1M了。
扩展阅读:
在JSON反序列化一文的最后,有提到,如果有1M的JSON文本应该如何来解析?
1M的JSON String,不管用GSON,fastjson,jackson,估计都要OOM了吧。本来我想说200M的JSON数据的,想想这太坑了,就改说1M了。
上文中HTTP那些事-JSON数据,我们提到,能否让我们的HTTP框架帮我们完成自动反序列化的操作。同时也给大家做了些提示:泛型和反射。
现在我们以Volley为例:
在Volley中有三种Request:FileRequest,StringRequest,ImageRequest。
JSON数据也是字符串,所以我们要重写StringRequest中的部分方法就可以咯。
看下StringRequest源码,你会看到解析服务器byte[]到String的是parseNetworkResponse(NetworkResponse response),解析完String直接就return给外层了。
随着Android的发展,各路大神的贡献,我们可用的轮子越来越多。比如HTTP请求框架,有自家的Volley,Square的okhttp, async-http-lib, 还有聚合版的xUtils以及AFinal。我想你肯定用过其中一个。
当然Stay今天不是来科普的,而是来跟大家一起思考一个问题的。我们暂且不提他们在内部做了多少优化,我们就说lib的返回数据。
在Android上,原生API有两个,HttpUrlConnection和HttpClient,它们对封装Socket进行封装,让HTTP请求变得简单。这应该也算框架吧?
想象下,如果没有HttpUrlConnection和HttpClient,一次性的API请求得有多麻烦。
现在,我们又多了一种OkHttp,Square出品。当然底层还是封装socket。为什么,为什么还要再出一个OkHttp,吃饱了撑的?肯定不是,那究竟有什么好的?自己动手查一下吧。
说到数据库加密,目前最好且唯一的方案就是SqlCipher对sqlite3整体加密,微信也用的它。开源,且支持很多平台。
单就Android来说,集成不算太麻烦,1个jar包,3个so库,1个zip。
jar包中基本上重写了android.database.sqlite包中所有的类,全部替换成了net.sqlcipher.sqlite包。why?因为sqlcipher加密后,需要密码才能打开该数据库。所以它把所有的都重写了一遍,这是一个坑,一会Stay再来说明。
性能优化是一个大的范畴,如果有人问你在Android中如何做性能优化的,也许都不知道从哪开始说起。
首先要明白的是,为什么我们的App需要优化,最显而易见的时刻:用户say,什么狗屎,刷这么久都没反应,取关卸载算了。
这跟什么有关,我们先苍白的反驳下,尼玛用户设备老旧网又烂,关我屁事,根本不用优化。可是,老板拍板了,施压给CTO,然后CTO又来找你:Y的今天必须给我想办法优化了,不然不准回家。
想必这样的问题,大家都有疑惑过。我想大部分的疑惑无非以下几点:
在一些场景中,经常会需要判断App是否在后台运行,比如是否显示解锁界面,收到新消息是否显示Notification等。需求可能是多样化的,但所依仗的原理是相通的,今天Stay打算说说这些需求的最优解。
在Android Studio中,自带反编译查看class文件,如果没有混淆的话,class文件跟java文件基本没有区别了,为了保护,还是混淆的好。
网上看了不少资料,都是直接下载proguard额外jar,直接生成,觉得不方便,既然apk都能混淆,为什么不直接通过Android Studio来混淆jar包呢。
做法其实很简单,一个build文件,一个proguard文件就可以了。