- 博客(19)
- 资源 (2)
- 收藏
- 关注
原创 Android6.0以下安装apk时,出现解析错误的问题的修复
笔者最近在做一个项目时,需要从app内部,从远端下载apk进行安装的需求。这种功能的实现已经有文章讲了很多,主要需要注意的时6.0的动态权限申请,7.0的 StrictMode策略,已经8.0的apk安装权限问题。在顺利走通了7.0和8.0版本的流程后,笔者却发现在6.0的版本上,竟然无法安装,爆出的错误为:解析软件包时出现问题。6.0的动态权限必定是已经申请过了。这种错误通常是因为apk没...
2019-06-11 02:23:00
4498
6
原创 Android热修复学习笔记(二):热替换修复
1.初识热替换修复 目前android热修方案有热替换修复和冷启动代码修复两个方向。相比之下,热替换方案适用性更为繁杂,但是由于其无须重启,实时修复的功能,让人印象深刻。热替换修复的基本原理是在类以及被加载的情况下,在其Native层用补丁包中的新方法替换掉旧方法。 在Android虚拟机中,每一个java方法都对应着一个ArtMethod,ArtMethod记录了这个java方法的所有信息...
2019-06-09 00:18:19
742
原创 Android热修复学习笔记(一):前导知识
热修复技术的诞生,是源于传统版本发布流程无法满足开发者对于即时修复bug的需求从而产生的。热修复的优势在于无需发布新的版本,用户不会感知bug修复。这样可以将bug修复的代价降到最低。 热修复分为热替代修复和冷启动修复,其中热替代修复体验和实时性会更好,但是相应的,限制会更高。而冷启动修复几乎能满足所有的热修复要求。 热修复主要有三个方面,分别为代码热修复,资...
2018-11-18 23:44:28
272
原创 关于butterknife中,R2文件应用错误造成的问题
前几天遇到了一个很神奇的问题,现在想想挺神奇的,就决定记录一下。崩溃的提示是像这样的:java.lang.IllegalStateException: Required view 'XXX' with ID XXXXXX for field 'XXXXXX' was not found. If this view is optional add '@Nullable' (fields) ...
2018-07-30 00:21:29
4440
2
原创 移动APP优化系列:卡顿优化
对于手机APP而言,流畅度的重要性是不言而喻。为了提升流畅度,Google对Android系统进行了大量的优化,包括使用了GPU硬件加速,引入了VSync,把Dalvik换成了Art等。那么对于开发者而言,应该如何提升手机App的流畅性呢。 1.定量测评手机流畅性 对于界面流畅性,很多人会想到FPS。在Android中,系统获取FPS的原理是这样的:手机屏幕显示的内容...
2018-05-02 01:34:39
2178
原创 Android源码解析:Intent实现原理
(一)Intent查找与匹配Android使用Intent进行组件,进程之间的通信和跳转。Intent具有隐式Intent和显式Intent两种,Android系统通过PackageManagerService来进行系统组件的维护。系统启动之后会注册各种系统服务,其中就包括PackageManagerService。在启动之后,PMS会扫描已安装的apk目录,解析apk包下的AndroidMani...
2018-02-22 15:44:40
2458
原创 Android源码解析:AlertDialog和WindowManager源码解析
(一)AlertDialog的实现模式AlertDialog的实现模式使用了Builder模式,通过Builder对象来组装Dialog的各个部分。AlertController用于存储Builder成员变量中的各个参数。AlertDialog可以设置title,message,button等参数,这些参数存储在AlertController.AlertParams的成员变量P中,AlertCon...
2018-02-20 23:16:07
653
原创 Android源码解析:LayoutInflater源码解析
(一)使用LayoutInflater我们通常使用LayoutInflater.from(Context)来获取LayoutInflater服务。 /** * Obtains the LayoutInflater from the given context. */ public static LayoutInflater from(Context context...
2018-02-19 00:02:30
300
原创 (一)java多线程编程设计模式之不可变模式
Immutable Object模式(一)Immutable Object模式在多线程环境中,一个对象通常会被多的线程共享,如果存在多个线程并发地修改该对象的状态或者一个线程访问该对象的状态而其他线程想要修改该对象的状态,就会出错。因此通常情况下,我们就会对这个对象加锁。加锁显然会有额外的开销,因此,我们可以使用Immutable Object模式來代替加锁的效果。Immutable
2018-01-06 21:56:07
441
原创 Retrofit源码学习笔记(3)-Converters解析
什么是Converters? 默认的,Retrofit只能将HTTP返回对象转化为okhttp的Responsebody,同时它也只能处理okhttp的RequestBody,这显然无法满足我们的要求,因此就出现了Converters,它的作用在于能加java类型转换为RquestBody对象,也能将Responsebody实体转化为Java对象。
2017-01-18 14:44:19
459
翻译 Gson源码学习笔记(1)——Gson使用教程(译)
本文是译文,原文地址:https://github.com/google/gson/blob/master/UserGuide.md 概述:标题Gson是一个用来将java对象转换为JSON形式的Java库。它也可以被用于将JSON字符串转换为相应的JSON字符串。 Gson可以处理任意的Java对象,包括那些你还没有用代码写出来的已存在的对象。Gson的目的提供简便
2017-01-13 21:09:40
414
原创 Retrofit源码学习笔记(2)-CallAdapter解析
Retrofit允许各种第三方库来对返回的HTTP call进行操作。因此这就要求Retrofit给出一套机制来使得API 请求和现有的第三库进行无缝的链接。这个机制就是CallAdapter,它可以将返回的 http call进行处理,从而适应不同的操作。
2017-01-11 22:00:38
1274
翻译 Retrofit学习教程(4)-Multiple Query Parameters of Same Name
写在前面: 本文是我看到Retrofit官方推荐的一个Retrofit技术文档,感觉收益匪浅,特此想把文档翻译一下,大家一起学习。 原文地址:https://futurestud.io/tutorials/retrofit-getting-started-and-android-client查询参数 查询参数是从客户端向服务端传递数据的一个最平常的方式。先来一个例子来展示请求一个id=123的
2017-01-06 22:01:52
278
翻译 Retrofit学习教程(4)-OAuth on Android
写在前面: 本文是我看到Retrofit官方推荐的一个Retrofit技术文档,感觉收益匪浅,特此想把文档翻译一下,大家一起学习。 原文地址:https://futurestud.io/tutorials/retrofit-getting-started-and-android-client本文不会深入探讨OAuth本身。他只会展示基础的原则和必要的信息来帮助理解验证流程。
2017-01-06 14:50:15
650
翻译 Retrofit学习教程(3)-Token验证
写在前面: 本文是我看到Retrofit官方推荐的一个Retrofit技术文档,感觉收益匪浅,特此想把文档翻译一下,大家一起学习。 原文地址:https://futurestud.io/tutorials/retrofit-getting-started-and-android-client本篇博文描述了如何在不使用您的Android app的API的情况下验证Token。本篇博文是对A
2017-01-05 19:30:00
1082
翻译 Retrofit学习教程(2)-Android基础验证
写在前面: 本文是我看到Retrofit官方推荐的一个Retrofit技术文档,感觉收益匪浅,特此想把文档翻译一下,大家一起学习。 原文地址:https://futurestud.io/tutorials/retrofit-getting-started-and-android-client这是关于Rtrofit系列文章的第二篇。他解释了如何应用retrofit来进行身份校验。
2017-01-05 15:39:44
343
原创 Retrofit源码学习笔记(1)一Retrofit
什么是Retrofit。官方的解释是,A type-safe HTTP client for Android and Java。一个适用于Android和java的类型安全的http客户端。事实上,Retrofit是对okHttp接口的封装,它的传输功能都是由okHttp所实现的。
2016-12-28 13:48:58
319
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人