![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 76
yang_song_song
不积跬步无以至千里,不积小流无以成江海
展开
-
APK的下载更新安装
一般的安卓app都有自动更新功能,实现app的更新,以让用户体验新版本的功能。 代码比较简单,当用户进入app中,首先会检验当前app的版本号与服务器的版本号,如果当前版本号小于服务器的版本号,则提示用户更新app。 /** * 获取到当前的本地版本 */ UpdateInformation.localVersion =原创 2016-03-23 18:18:28 · 457 阅读 · 0 评论 -
手把手带你从源码的角度全面理解Handler、Looper、MessageQueue之间的关系
目标: 首先要明确几个目标,我们要解决以下几个问题: a.线程是如何与Looper关联起来的? b.一个线程里面可以有几个Looper? c.消息是怎么从一个线程传递到另一个线程的? d.Handler、Looper、MessageQueue三者之间的关系是怎样的?分析源码前,先举个栗子:MessageQueue相当于一个池塘,Message就是池塘里面的水,Looper就是一台抽水机,现原创 2017-07-27 17:45:37 · 247 阅读 · 0 评论 -
Android7.0解决 android.os.FileUriExposedException: file:///storage/emulated/0/
解决Android N文件访问crash android.os.FileUriExposedException file:///storage/emulated/0/xxx原因:Android N对访问文件权限收回,按照Android N的要求,若要在应用间共享文件,您应发送一项 content://URI,并授予 URI 临时访问权限。 而进行此授权的最简单方式是使用 FileProvider原创 2017-08-14 18:27:34 · 29958 阅读 · 0 评论 -
android强大的SpannableStringBuilder
SpannableStringBuilder和SpannableString的区别类似与StringBuilder、String,就是SpannableStringBuilder可以拼接,而SpannableString不可拼接。主要的方法SpannableStringBuilder和SpannableString主要通过使用setSpan(Object what, int start, int e原创 2017-09-19 19:32:59 · 521 阅读 · 1 评论 -
你所不知道的RXJava2.0
我们先来学习如何使用Flowable, 它东西比较多, 也比较繁琐, 解释起来也比较麻烦, 但我还是尽量用通俗易懂的话来说清楚, 毕竟, 这是一个通俗易懂的教程.**正题**我们还是以两根水管举例子: prepare.png 之前我们所的上游和下游分别是Observable和Observer, 这次不一样的是上游变成了Flowable, 下游变成了Subscriber, 但是水管之间的连接还是通原创 2017-09-12 15:48:29 · 650 阅读 · 0 评论 -
你所不知道的RXJava2.0
我们有个例子, 当上游一次性发送128个事件的时候是没有任何问题的, 一旦超过128就会抛出MissingBackpressureException异常, 提示你上游发太多事件了, 下游处理不过来, 那么怎么去解决呢?我们先来思考一下, 发送128个事件没有问题是因为FLowable内部有一个大小为128的水缸, 超过128就会装满溢出来, 那既然你水缸这么小, 那我给你换一个大水缸如何, 听上去很原创 2017-09-12 15:53:25 · 271 阅读 · 0 评论 -
你所不知道的RXJava2.0
我们讲Flowable的时候,说它采用了响应式拉的方式,我们还举了个叶问打小日本的例子,再来回顾一下吧,我们说把上游看成小日本, 把下游当作叶问, 当调用Subscription.request(1)时, 叶问就说我要打一个! 然后小日本就拿出一个鬼子给叶问, 让他打, 等叶问打死这个鬼子之后, 再次调用request(10), 叶问就又说我要打十个! 然后小日本又派出十个鬼子给叶问, 然后就在边上原创 2017-09-12 15:57:53 · 303 阅读 · 0 评论 -
由Android 65K方法数限制引发的思考
没想到,65536真的很小。 Unable to execute dex: method ID not in [0, 0xffff]: 65536 PS:本文只是纯探索一下这个65K的来源,仅此而已。 到底是65k还是64k? 都没错,同一个问题,不同的说法而已。 65536按1000算的话,是65k ~ 65 1000; 65536按1024算的话,是64k = 64 1024。 重原创 2017-11-09 10:43:18 · 271 阅读 · 0 评论 -
Robust 接入
前言 Robust热更新系统借鉴Instant Run原理,实现了一个兼容性更强而且实时生效的热更新方案。其基本思路是,Robust热更新系统在一个方法的入口处插入一段跳转代码,当发现某个方法出现bug就跳转执行补丁中的代码,略过原有代码的执行,否则执行原有方法体逻辑。 Github:https://github.com/Meituan-Dianping/Robust/blob/master/...原创 2018-07-02 13:20:19 · 1167 阅读 · 0 评论 -
ROBUST 完整修复流程
一.内部版本接入 内部最新版本为0.7.48,接入方式与外部版本相同,不再赘述。详情看:ROBUST接入着重讲解外部版本与内部版本的区别:外部版本需要设定补丁加载路径以及加载时机,内部则配合Env自行保存及加载。内部使用需要在Application中手动初始化Robust,如图: 根据观察的补丁加载时机以及抓包的结果来看。推测:内部补丁加载时机为Application初...原创 2018-07-02 13:27:21 · 1800 阅读 · 0 评论 -
Java中ThreadPoolExecutor的详细介绍
从 Java 5 开始,Java 提供了自己的线程池。线程池就是一个线程的容器,每次只执行额定数量的线程。 java.util.concurrent.ThreadPoolExecutor 就是这样的线程池。它很灵活,但使用起来也比较复杂,本文就对其做一个介绍。首先是构造函数。以最简单的构造函数为例:public ThreadPoolExecutor( int coreP原创 2017-08-04 15:29:56 · 290 阅读 · 0 评论 -
Android webView的cookie机制
原理分析:> WebView是基于webkit内核的UI控件,相当于一个浏览器客户端。它会在本地维护每次会话的cookie( 保存在data/data/package_name/app_WebView/Cookies.db)。 如图: 查看APP cookie 当WebView加载URL的时候,WebView会从本地读取该URL对应的cookie,并携带该cookie与服务器进行通信。We原创 2017-05-23 14:49:54 · 1353 阅读 · 0 评论 -
FlabbyListView——显示ListView的Android类库
FlabbyListView是Android类库,用于显示不规则单元格的ListView,单元格会根据ListView的滚动出现波浪效果。 首先来看listView的布局文件 <com.ys.flabbylistviewdemo.FlabbyListView android:id="@+id/flabbyListView" android:layout_widt原创 2016-03-14 20:52:21 · 314 阅读 · 0 评论 -
Glide的正确使用
在项目中引入Glide Gradle: compile ‘com.github.bumptech.glide:glide:3.7.0’ Maven: com.github.bumptech.glide glide 3.7.0 Eclipse: 在这里 https://github.com/bumptech/glide/releases下载jar包,放到libs文件原创 2017-03-29 16:15:00 · 1461 阅读 · 0 评论 -
了解 Retrofit2 的安全性
一 什么Retrofit官方标语;A type-safe HTTP client for Android and Java 语意很明显一款android安全类型的http客户端, 那么怎么样才算安全?支持https?支持本地线程安全? 发现Rertofit其内部都是支持lambda语法(国内称只链式语法),内部支持okhttp, 并且支持响应式RxJAava,当然jdk1.8 和androi原创 2017-03-13 15:11:16 · 784 阅读 · 0 评论 -
关于RxJava最友好的文章——背压(Backpressure)
前言背压(Backpressure)可能是所有想要深入运用RxJava的朋友必须理解的一个概念。关于它的介绍,我本意是想写在RxJava2.0更新介绍的文章里的,可是写着写着发现,要完整介绍这个概念需要花费的篇幅太长,恰好目前对于背压的介绍文章比较少,所以决定单独拿出来,自成一篇。而关于RxJava2.0的文章修改之后就会发出来和大家探讨。如果对于RxJava不是很熟悉,那么在这篇文章之前,我希望大原创 2017-04-13 19:30:45 · 575 阅读 · 0 评论 -
从Java垃圾回收机制窥探内存优化
回答一个疑问这篇文章讲的是Java的JVM的垃圾回收机制,但是Android使用的虚拟机是Dalvik或者ART,那么下面讲的垃圾回收机制是否适用于Android呢?答案是,Yes,是可以类比的。(增补) 文章末尾有人提出了质疑: JVM 的内存模型和 Android 虚拟机是区别的?答案:是的,Android基于寄存器,jvm基于堆栈,本文其实避免了这样的探讨,那是因为在逻辑上它们其实没有太大区原创 2017-04-19 19:35:32 · 302 阅读 · 0 评论 -
App性能之优化
今天聊下个人比较惯用的一些App性能测试和分析工具, 先上个图: ![性能分析工具] tools_mind_node 本文暂不对工具的使用做过多的深入. 在后续的具体实例中会具体说明怎么用这些工具来达成分析目的和解决问题的. 1, 官方工具一般来说, 学习一门新的技术, 最应该做的就是阅读其官方文档, 那是最权威的. Android本身给我们提供了很多App性能测试和分析工具, 而且大部原创 2017-04-20 11:08:46 · 550 阅读 · 0 评论 -
Http gzip的压缩原理
进入主题之前,我们先来看一下客户端与服务器通信过程中,如果服务器支持,HTTP gzip压缩是如何实现的?如图所示: request header中声明Accept-Encoding: gzip,告知服务器客户端接受gzip的数据。 服务器支持的情况下,返回gzip后的response body,同时加入以下header:Content-Encoding: gzip:表明body是gzip过的数原创 2017-05-23 14:29:33 · 3250 阅读 · 0 评论 -
多Dex加载方案对比
随着业务扩张,代码量越来越大,apk中单个dex方法数超过65K,就需要dex分包,Google官方推出了MultiDex来解决65K的问题,区分不同的Android虚拟机,会有一些问题。Dalvik上,使用JIT(just in time),应用运行时,需要先将dex转换成os上可以运行的机器码,在此过程中,还会对dex文件进行优化(dexopt),因此在应用第一次启动时,会经历这些过程,a...原创 2018-07-02 13:34:16 · 1396 阅读 · 0 评论