自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 Android热修复技术(三)-----代码修复之冷启动类加载原理

前一篇博客阐述了代码修复之底层替换原理,这篇文章主要讨论代码修复之冷启动加载原理。因为底层替换方案的根本原理是基于native层的方法的替换,具有很大的局限性,不能新增减少类的方法和字段的数目,而冷加载的类加载方案可以突破这些的限制,因此这个方案也是非常重要的。其他的冷启动方案QQ空间QQ空间的热修复方案是利用插桩实现,也就是引入一个单独的无关帮助类放到一个单独的dex中,原来的dex的所有类的构造

2017-07-11 23:10:02 1328

原创 Android热修复技术(二)------代码修复之底层替换原理

1、Andfix是怎么实现的热修复??由于Java层的每一个方法在虚拟机实现里面都对应着一个ArtMethod的结构体,只要把原方法的结构体内容替换为新的结构体的内容,在调用原来方法的时候,真正执行的指令是新方法的指令,就是就可以实现热修复。 Andfix采用的方法是在已经加载了的类中直接在native层替换掉原有的方法,是在原来类的基础上进行修改的,其核心是native方法replaceMeth

2017-07-05 22:44:44 2028

原创 Android热修复技术(一)

现在的android热修复技术大行其道,各大公司基本都有自己的一套热修复机制,顿觉是时候学习一波了,通过阅读了阿里的android热修复技术原理,收益颇丰,在这里写下一些理解。 在线出现了bug怎么办? 1、传统的更新流程是紧急修复,然后重新发布,但是需要用户进入应用商店,下载完成更新,显然用户体验非常差 2、因此有人想出了一种解决方案,采用Hybrid方案,把需要经常变更的业务逻辑用H5抽

2017-07-04 22:20:28 1378

原创 Android项目如何搭建属于自己的技术堆栈

1、APP的整体架构一个APP的整理架构可以分为2层,应用层和基础框架层。 应用层专注于行业领域的实现,例如金融,支付,地图导航,社交等,是面向用户的,是关于用户对产品的第一层感知。 基础框架层专注于技术领域的实现,提供APP公有的特性,是用户对产品的第二层感知,比如性能,稳定等。一个理想的APP架构, 1、首先要是跨平台的, 2、然后具有清晰的层次划分,同一层模块间充分解耦,模块内部符合面

2017-03-29 00:42:23 2043

原创 android View绘制流程与机制

要想知道android绘制的整体流程,我们需要先知道android的UI管理系统的层次关系。android的UI管理系统的层次关系PhoneWindow是android系统中最基本的窗口系统,每个Activity会创建一个,它是Activity和View系统交互的接口。下面的是DectorView,他的本质是一个FrameLayout,是Acitivity中所有的view的祖先,里面依此为ViewG

2017-03-27 23:07:20 551

原创 java并发编程中的一些理解

1、java并发编程中需要注意的挑战以及应对策略? 在java并发编程中,会遇到上下文切换,死锁等问题。要想减少上下文切换,主要有以下的方法: 无锁并发编程,比如将数据的ID按照Hash算法取模分段,不同的线程处理不同的段; CAS算法; 使用最少线程;避免创建不必要的线程; 协成;在单线程中实现多任务的调度,在单线程中维持多个任务间的切换。 避免死锁的一些常用手段: 避免一个线程同

2017-03-22 21:14:41 396

原创 如何使新手引导页下面的小圆点随手指滑动而滑动?

我在做项目的时候,发现了很多app中新手引导页的下面的小圆点是写死在页面上的,这样给人的感觉很丑,我就在想,能不能让手滑动多少,小圆点就跟着滑动多少呢? 答案是肯定的,那么就会遇到第一个问题,如何获得这个view控件的宽和高? 我在做项目的时候是想在onCreate()方法中获取view的宽和高,然而在调用oncreate()方法时,界面处于不可见状态,内存加载组件还没有绘制出来,你是无法获取他

2017-03-20 21:04:59 1602

原创 Java内存模型理解

jvm试图定义一种Java内存模型来屏蔽掉各种硬件和操作系统的内存差异, 从而实现让java程序在各种平台上都能达到一致的访问效果。 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样底层细节。此处的变量与Java编程时所说的变量不一样,指包括了实例字段、静态字段和构成数组对象的元素,但是不包括局部变量与方法参数,后者是线程私有的,

2017-03-16 19:26:37 286

原创 Jvm类加载机制理解

虚拟机把描述类的数据从class文件加载到内存,并对数据进行验证,准备,解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。一、类加载主要分为以下几个阶段: 加载 验证 准备 解析 初始化 使用 卸载 关于初始化: (1) 遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生

2017-03-14 17:29:52 303

原创 java垃圾回收机制

一直以来jvm对于我来说是既熟悉又神秘,本文给出我对于jvm的垃圾回收机制的一些理解。1、什么样子的对象是垃圾,需要回收呢??如果一个对象只有软引用或者弱引用来引用的时候,或者已经没有引用的时候,我们就说他是垃圾,需要被回收了,那么就有了第二个问题,怎么判断这个对象需要回收呢??2、怎么判断一个对象需要回收呢??以前的教科书都说采用了引用计数算法来判断对象是否存活,即:如果有一个地方引用这个对象,那

2017-03-13 22:41:07 293

原创 Timber使用

android 原生的日志log用着很多的缺点: 为了找某条log是从哪里打出来的,还要花点功夫。 即使找到了,怎么知道运行时是在哪个线程? 日志去了不再来。在未连接调试的手机上,或者调试中不小心重启App了,日志就没了。 因此需要找一个更好的log库。以下两个都是非常好的。 https://github.com/orhanobut/logger :简单、漂亮、强大的Android logger,

2017-03-06 14:10:17 9184 1

原创 Android事件分发消费机制理解

以前一直有关注Android事件分发机制,在网上找了很久的资料,但是感觉大多都是晕乎乎的,自己也理解了很久很久,这里写一些自己的理解。 这里的事件响应主要有三种: onInterceptTouchEvent(MotionEvent ev)—事件拦截 dispatchTouchEvent(MotionEvent ev)—事件分发 onTouchEvent(MotionEvent ev)—事件响应

2017-03-02 17:09:22 699

原创 Android 性能优化(二)

上篇我们讨论了涉及数据结构的选取,单例模式中的内存泄漏,handler中的内存泄漏以及一些细微的可以增加android性能的方法。本篇继续讨论android性能的优化。5、图片优化对于图片,内存优化中有两个手段: 一是减少图片本身所占的内存; 二是缓存经常使用的图片,避免重复创建文件,增加内存的开支。 图片有很多种格式,常见的主要有jpeg(有损压缩),png(无损压缩),gif,bmp,we

2017-02-28 16:05:50 315

原创 Android 性能优化(一)

Android软件是否受用户欢迎不仅仅取决于这个软件的页面设计是否精美,提供的功能是否方便,一个很重要的因素是这个app本身的性能。接下来的几篇文章,我们来讨论一下android性能优化的那些事。

2017-02-27 17:01:33 440

原创 生成多渠道apk文件

有时候我们需要在不同的应用市场进行不同的apk定制,如果开发维护多个版本,那么一旦有修改的需求,那需要修改的文件就非常多,工作量也比较大。现在介绍一种可以生成多渠道apk文件的方法。 在android studio对应项目的app/build.gradle中添加下面的代码:productFlavors{ google{ applicationId "co

2017-02-27 13:58:14 533

原创 如何对Android应用进行签名

要想将一个应用发布到应用市场,首先要对这个应用进行签名。下面主要介绍如何使用Android studio 对应用进行签名: 点击导航栏上的Build->Generate Signed APK,然后出现如下截图: 点击create new按钮,出现下面截图:按照要求填好各项,点击finish,后在右上角出现如下提示: 5、点击show in Explorer, 这个就是带有签名的APK文件

2017-02-27 13:29:01 371

原创 将背景图和状态栏融合到一起的一种方法

将背景图和状态栏融合到一起的方法有很多,这里先介绍一种方法,这个功能是Android5.0以及以上的系统支持的,代码如下:if (Build.VERSION.SDK_INT >= 21) { getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTE

2017-02-24 13:36:36 1185

原创 Android内核安全机制理解

Android是基于Linux内核的,所以其内核层的安全机制是基于Linux内核的,这里主要讨论文件访问控制机制,进程隔离与保护机制,内存管理机制。文件访问控制机制主要是使一个文件有三种访问权限,分别是该用户,该用户所属于的用户组,以及其他用户,相应的权限操作主要有r(读),w(写),x(执行)“ -rwxr-xr–”表示了一个文件在文件所有者和文件所在组的权限配置情况。应用程序进程隔离和保护机制每

2016-09-20 16:44:48 2161

原创 Android pendingIntent理解

pendingIntentPendingIntent常用的静态方法主要有: getActivitity(Context context, int requestCode, Intent intent, int flags) 跳转到一个activity组件; getBroadcast(Context context, int requestCode, Intent

2016-09-05 17:50:57 418

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除