自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

左手木亽

长亭外,古道边,芳草碧连天~

  • 博客(89)
  • 资源 (3)
  • 收藏
  • 关注

原创 基于booster给方法套层try..catch (Demo)

如果不自己写一个plugin插件的话,可以现有开源库比如Lancet或者AspectJ这两个库功能强大,自然用于给方法套一层try…catch自然是轻而易举,可以网上搜索下有很多的文章。本文默认你已经熟悉了采用ASM实现gradle plugin 以及熟悉booster...那么回到我们的话题上:自己如何使用ASM技术给方法套一层try…catch呢?举个例子,如果给如下代码中的printStr方法套一层try…catch呢?public class HookTest { public v

2021-12-01 14:55:43 312

原创 基于booster仿造“ASM在隐私合规扫描中的应用实战“

在看了京东零售技术的公众号发的文章:ASM在隐私合规扫描中的应用实战之后,想把这个插件整合进自己的一个ASM实现plugin合集中来,由于自己的工程是仿造booster框架实现的,也就是说得把原文中是采用MethodVisitor的方式替换成ClassNode的方式。本文默认你已经熟悉了采用ASM实现gradle plugin 以及熟悉booster...第一步:先按原文的方式构造代码,这里简单采用打印log的方式输出 如下:public class PrivateUtil { publi

2021-10-21 16:59:39 370

原创 一种动态更新Flutter产物的方式实践(Android版)

在一个工程中嵌入Flutter模块的时候,很明显就会发现给apk带来了不少M的包大小,而这些带来大小的除了flutter sdk引入的源码外,还有以下这些肉眼可见的"产物"。所以,如果这些产物能够动态下发不仅可以减少包大小也能给自己的业务代码热更新的效果,有种一举两得的效果。因为:libfutter.so:运行Flutter依赖so文件libapp.so: 这里就是dart代码编译后的产物flutter_asserts: 这里存放的项目中用到资源这里,我们直接把这些产物按自己喜欢的

2021-04-13 21:58:36 502

原创 闲鱼"同款"的Flutter图片下载功能(demo版)

前不久闲鱼团队的公众号发了一篇文章讲了闲鱼团队在Flutter图片框架的演进过程文章,里面讲到了使用外接纹理的方式来实现图片下载功能:闲鱼Flutter图片框架架构演进(超详细),本文的用意就是动手实现闲鱼的这个外接纹理图片下载功能。在刚学Flutter的时候我们的图片下载功能一般都是直接使用Flutter官方提供的api来加载网络图片,如:Image( image: NetworkIma...

2020-04-25 22:05:27 664

原创 Flutter视频播放封装历程

本文基于官方视频播放plugin进行封装https://github.com/flutter/plugins/tree/master/packages/video_player/video_player在日常的开发中,难免会遇到视频开发需求;随着Flutter技术日渐活跃所以在所难逃会有视频功能的需求,如果完完整整把官方提供的video_player功能直接搬进来使用会发现在很多地方需要进...

2020-02-24 14:00:37 1156

原创 探索Flutter读取原生图片资源

感谢 https://zhuanlan.zhihu.com/p/41731950这里的原生指Android,当然针对iOS的思路是一样可取的。开始如果要想在flutter中使用本地图片资源,都会将图片放入工程的某个目录,然后在pubspec.xml中注册:assets: - images/apk_coin_money.png - images/apk_coin_mone...

2019-03-13 22:08:30 3634

原创 Flutter混合开发和动态更新的探索历程 Android版

2018-11-29 23:03:35 4090 18

原创 源码解析一次OKHttp请求的过程

OkHttp这个库有多优秀作为Androider大家心里都明白,应该说合格的开发者都认识它。那么,这里简单看个OKHttp的接口请求姿势:OkHttpClient okHttpClient = new OkHttpClient();Request request = new Request.Builder() .url("https://www.xxxx.com/xxx/xxx...

2018-10-22 16:11:38 346

原创 ReactNative源码分析之JS渲染成Android控件

经过了一番对ReactNative的学习之后,我们都知道只要敲入react-native run-android神奇的JS代码就被编译成Android可以理解的View了,不得不惊叹ReactNative隐藏的神秘的力量,所以本文分析一下一个Hello,World的JS代码是怎么变成Android控件的. 简单的看一下JS代码:render() { return (<View...

2018-08-12 18:00:37 1125 1

原创 Android开源库Retrofit中RxJava的工作流程分析

写这么一篇文章主要是为了解惑,我们都知道Retrofit可以配合RxJava一起使用,而且那种链式的调用简直了,但是一直有个疑惑:getObservable().subscribe(new Observer<String>() { @Override public void onNext(String value) { // ......

2018-07-06 15:58:44 309

原创 Android模块化中数据传递/路由跳转实现

虽然说模块通信、路由协议在Android已经不新鲜了,但是如果脱离了那些优秀的开源库我们从零开始自己造一个库,有时候重复造轮子会让自己对所谓”车”的原理懂得更透彻。 直接上造完的轮子地址: https://github.com/Neacy/NeacyComponent这个轮子有两个大功能分别是模块通信以及路由跳转:模块通信首先,统一声明姿势:public interface IC...

2018-06-21 16:04:48 951

原创 深入浅出Android中的App启动流程分析

App启动是指用户点击手机桌面的app对应的icon开始,所以我们需要明白几点基础知识: 1.桌面也是一个Activity叫Launcher.java 2.在桌面点击icon启动app跟在app内部启动另一个Activity是一样的都是调用startActivity方法平时通常我们都是直接调用startActivity从而忽略了Framework层中的实现原理是怎样的,当然我们不可能深入代...

2018-05-10 15:58:36 956

原创 Android源码分析Debug下ReactNative的bundle文件加载流程

本文主要分析在debug环境下Android是怎么加载到bundle文件的主要加载流程,不涉及太底层的代码均是Java代码分析。开始首先我们也在AndroidStudio中多多少少看过RN的源码,也知道它其实就是一个ReactRootView,而且是通过下面这段代码进行加载相对应的视图呈现我们要的UI效果:mReactRootView.startReactApplication(...

2018-03-14 22:10:37 1435

原创 ReactNative跟Android原生模块是如何进行数据交互实例

引文:有时候App需要访问平台API,但React Native可能还没有相应的模块包装;或者你需要复用一些Java代码,而不是用Javascript重新实现一遍;又或者你需要实现某些高性能的、多线程的代码,譬如图片处理、数据库、或者各种高级扩展等等。 来自:https://reactnative.cn/docs/0.51/native-modules-android.html#con...

2018-03-06 18:11:31 930

原创 RxJava中的线程调度源码解析

首先,异步请求或者读取数据是平时开发中很常见的一个功能,在数据获取成功之后需要显示到主线程的UI上的时候平时我们都是通过Handler进行转换。

2017-12-29 11:52:22 399

原创 RxJava中subscribe流程源码分析

接触RxJava算是比较早了,早期RxJava 1.0出来的时候就结合Retrofit然后搭配MVP框架使用了, 年初加入新公司也有用到RxJava不过中间比较长一段时间没有接触,准备彻底深入的学习一下。

2017-12-28 15:50:47 956

原创 通过Gradle的Transform配合ASM实战路由框架和统计方法耗时

首先,现在世面上的项目基本上都是N多个module并行开发很容易就会出现moduleA想跳转到moduleB某一个界面去如果你没有把moduleB在对应的build.gradle中配置的话,AS就会友好的提示你跳不过去,这时候就需要一个路由来分发跳转操作了。 其次,随着时间的慢慢迭代发现需求功能已经写完了,慢慢开始要各种优化了,常见的优化是速度优化自然而然就需要查看方法的耗时情况

2017-11-15 23:18:02 4851 13

原创 Android中UI性能分析原理

涉及到UI性能问题我们需要直面的就是卡顿,为了让应用更加流畅我们不得不做一些监控,从而能及时修复卡顿现象还用户一个丝滑的体验。

2017-10-26 15:26:53 783 1

原创 ViewStub的实现深入解析

布局优化是性能优化中一项不可缺失的工作,而ViewStub是性能布局优化中很有必要的一项,使用ViewStub可以把类似空白页、错误页等不需要马上显示的View实现懒加载的效果,而且内存占有量非常的少,它是一个宽高为0、不执行draw方法且本身设置了View.GONE所以基本上不参与layout,非常适合用于做懒加载的布局优化。

2017-09-13 16:21:31 624 1

转载 Android中怎么计算apk的启动时间

本文来自 https://www.zhihu.com/question/35487841 这是一篇讨论怎么计算apk的启动时间…

2017-07-21 14:33:52 992

原创 LeakCanary从入门到源码分析

“A small leak will sink a great ship.” - Benjamin Franklin 千里之堤, 毁于蚁穴。 – 《韩非子·喻老》 LeakCanary是什么?可以从LeakCanary的github很容易的得到定义: Android|Java的内存检测库 更多使用方法:https://www.liaohuqiu.net/cn/po

2017-07-13 18:58:02 3131

原创 Android中利用APT生成代码

APT已经不新鲜了,虽然我们都知道这是个什么东西: APT(Annotation Processing Tool 的简称),可以在代码编译期解析注解,并且生成新的 Java 文件。 但是为了能自己动手采用APT写一个框架那才能说是真的了解它、所以本文模仿butterknife自己写一个方便加深印象。

2017-06-18 00:49:36 952

原创 采用APT&RxJava造一辆RxBus

首先感谢以下文章: APT:https://github.com/lizhaoxuan/Android-APT-Framework 反射:http://www.cnblogs.com/lzq198754/p/5780331.html 注解:http://www.cnblogs.com/linjiqin/archive/2011/02/16/1956426.html

2017-01-22 18:51:01 846

原创 Android中线程池的使用

本文来自:Amit Shekhar的一篇译文,地址 https://medium.freecodecamp.com/threadpoolexecutor-in-android-8e9d22330ee3#.c451hqaf2本文主要讲解线程池、线程池Executor在Android的使用,并且通过代码片段来覆盖这些主题。

2016-12-07 22:41:16 1187

原创 Android6.0权限管理到RxPermissions源码分析

在给应用适配6.0版本的时候,我们就需要运行时权限管理。在6.0开始有一套新的运行机制管理用于更友好的保护用户的隐私安全,一般涉及用户隐私的需要实时来提示用户通过允许和拒绝来授权。

2016-10-05 00:16:24 4733

原创 从热更新到Nuwa源码分析

参考文章: 安卓App热补丁动态修复技术介绍——by QQ空间终端开发团队 Android dex分包方案 Android热更新方案Robust 开源库: https://github.com/jasonross/Nuwa https://github.com/dodola/HotFix

2016-09-30 14:03:01 1273

翻译 在Android中使用正确的姿势写一个string.xml

首先,本文用于记录Android中琐碎的string.xml声明。

2016-09-25 23:14:34 4515

原创 使用RxJava自己构造一个三级缓存的实例

通常我们说的三级缓存是指Memory,Disk,NetWork,因为我们都知道从网络读取一条数据往往存在各种因素速度不尽人意,如果一个应用中任何数据都是实时从网络获取,那么我们想象一下用户每次都要面对如进度条转个两三圈才显示数据这种体验肯定是不佳的,所以我们需要缓存数据,所以本文介绍使用RxJava通过实例来讲解如何缓存数据。

2016-08-20 17:08:59 1239

原创 RecycleView从显示到下拉刷新和加载更多

RecycleView出来已经有一两个年头了最近在项目中完全替换掉了ListView很有必要的写一篇记录一下使用过程,以便以后温故而知新。RecycleView的使用场景开始到初始化RecycleView可以用于展示列表式、网格式、瀑布流式风格的界面而且使用方便,可以这么来讲任何ListView能做到的功能RecycleView它也能做到而且能轻松驾驭比ListView更加强大的功能

2016-08-06 21:00:21 1934

原创 注解(Annotation)从实例开始

Annotation(注解)是一个以@interface声明的一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据,要求JDK版本要1.5才有这个功能。Annotation使用起来跟普通的接口基本上相似,只是多了一个@符号。

2016-07-17 22:40:00 688

原创 RxJava中的Subject和常见的生命周期管理

首先,从下面这个对Subject类的定义中可以看出Subject既可以是Observer也可以是Observable。public abstract class Subject<T, R> extends Observable<R> implements Observer<T> 这种就非常适合于把数据先存入到Subject中,然后转成Observable这样就可以发射事件流了

2016-07-14 20:14:23 2765

原创 Android自定义View的正确流程

平时开发中Android已经为我们提供了很多优秀的UI控件,我们可以直接拿来用就能正确的显示我们想要的效果,那么问题来了我们要的效果系统并不能满足这时候我们就要自定去定义一个View了。所以我们从简单画一个圆来说明View的自定义流程。在开始之前我们肯定都会疑问 1.如何自定义圆的颜色、大小 2.为什么margin有效果而padding却无效呢。

2016-06-19 16:09:11 632

原创 Retrofit结合RxJava的一次实践

公司的一个项目中已经采用了Retrofit加RxJava的作为网络请求框架,强大的框架所以替换了那么久决定记录一下我的实践过程。

2016-05-31 21:58:33 1509

原创 使用RxJava实现的超简单事件总线RxBus

项目中加入了RxJava,所有很有必要把Eventbus给替换掉了,引用使用RxBus完全满足了需求了。而且RxBus实现起来超简单只需要几行代码就好了而且同一使用RxJava来取消绑定,我们可以忽视了Eventbus的unregister的过程,当然我们还是需要在界面结束的时候取消Observable间的订阅关系。

2016-03-23 22:21:32 2457

原创 使用Gradle统一管理常用库和版本号

现在AndroidStudio已经是开发Android的主流IDE了,当然还有人在使用Eclipse特别是那些项目中使用自己开发的so文件的公司可能由于各种原因还没切换到AndroidStudio。在AS中常见的引用库我们是在我们项目的build.gradle进行引入常用库,并使用gradle来进行渠道打包等操作。

2016-03-14 22:19:25 5397

原创 Android高效网络请求Retrofit框架

Retrofit已经升级到2.0版本了,之前在项目中一直使用Volley作为网络请求框架那么为什么我们要考虑替换到Retrofit呢。

2016-03-11 22:22:19 1004

原创 Android的IPC机制实现方式之Messenger

Messenger可以翻译成信使,通过它可以在不同进程间传递Message对象有了它就可以轻松实现进程间的数据传递了。Messenger使用的方法相对AIDL比较简单,它对AIDL做了一层封装是的我们不需要像采用AIDL那样去实现进程通信那么麻烦,可以看看他的源码有AIDL的迹象。

2016-03-06 00:25:38 1088

原创 在Android使用AIDL实现IPC机制

之前在自己应用中把一个视频播放界面采取了多进程机制实现,这样的好处是当播放界面出现任何异常会把视频播放的那个进程强制关闭而不会影响到整个应用,从用户体验上来讲有很大的改善。我们采取的做法:android:process=":remote"这样能轻松实现多进程机制,可是由它带来的不可预见的问题也是接踵而来主要表现的就是两个进程间如何通信的问题,所以当时我采用的aidl实现两个进程间的通信问题。

2016-03-02 21:38:39 1046

原创 Android的序列化Parcelable接口

在Android中我们推荐使用Parcelable来实现对象的序列化,只要我们实现Parcelable这个接口,一个类的对象就可以实现序列化并通过Intent和Binder传递

2016-03-01 21:27:47 627

原创 基于RxJava实现的MVP实例

以前我们所谓的MVC架构通常我们会在Model跟View直接交互,而MVP中我们采用Presenter作为中间Model获得数据后传给Presenter然后Presenter将结果传递给View显示。

2016-02-25 20:08:29 868

ViewPager界面实现图片先后效果

欢迎界面使用ViewPager和HorizontalScrollView实现界面图片先后到达的效果。

2013-11-14

Httpmime.jar包

方便于移动端图片上传,利用封装好的jar包给开发进度节省时间,当然好坏自己酌情。

2013-07-10

ViewGroup实现VIewpager的效果

在ViewPager中以Scroller的滑动来实现ViewPager的功能。

2013-07-09

空空如也

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

TA关注的人

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