清浊决
码龄15年
求更新 关注
提问 私信
  • 博客:96,248
    96,248
    总访问量
  • 59
    原创
  • 25
    粉丝
  • 37
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
加入CSDN时间: 2010-09-27
博客简介:

自由麦田

博客描述:
技术永无止境
查看详细资料
个人成就
  • 获得26次点赞
  • 内容获得62次评论
  • 获得35次收藏
  • 博客总排名1,000,757名
创作历程
  • 8篇
    2020年
  • 32篇
    2019年
  • 2篇
    2014年
  • 18篇
    2013年
成就勋章
TA的专栏
  • 多媒体技术
  • weex
    1篇
  • Andriod程序
    7篇
  • Java
    4篇
  • 笔试面试
    2篇
  • linux系统相关配置
    3篇
  • ACM编程题解答
    1篇
  • 编译原理
  • Unix
  • 网络应用
    2篇

TA关注的专栏 1

TA关注的收藏夹 0

TA关注的社区 1

TA参与的活动 0

兴趣领域 设置
  • 前端
    javascriptreact.jses6前端框架
  • 微软技术
    typescript
创作活动更多

新星杯·14天创作挑战营·第13期

这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请你们参加为期14天的创作挑战赛!注: 1、参赛者可以进入活动群进行交流、互相鼓励与支持(开卷),虚竹哥会分享创作心得和涨粉心得,答疑及活动群请见:https://bbs.csdn.net/topics/619781944 【进活动群,得奖概率会更大,因为有辅导】 2、文章质量分查询:https://www.csdn.net/qc

89人参与 去参加
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

CsipSimple源代码

发布资源 2013.09.16 ·
zip

基于Java的文件加密与解密

发布资源 2013.03.07 ·
rar

架构师到底是做什么的?

摘自公司一个P10的精辟总结:好的架构师,反复做四件事:1. 先选一个好的挑战,解释: 为了创造价值,这个挑战不是技术挑战,而是为了解决什么样的用户痛点,用户问题。要对业务有很好的了解。2. 把简单的东西想复杂解释:为了控制好风险和准备好未来3. 把复杂的东西做简单解释:为了做好产品且控制好成本4. 把复杂的东西讲简单解释:为了做好传承不好的架构师:1. 选一个不值得做的问题2.把复杂的问题想简单...
原创
博文更新于 2020.06.25 ·
1467 阅读 ·
3 点赞 ·
0 评论 ·
3 收藏

RxJava2的Observable变种之变换操作符

map—— 一对一转换,一般是转换成结果,如string到int的转换。可以集合进行转换,每次转换都接着执行onNext操作。看个map的例子Observable.create(new ObservableOnSubscribe<String>() { @Override public void subscribe(ObservableEmitte...
原创
博文更新于 2020.03.17 ·
357 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

RxJava2的中轴线

RxJava2的基础UMLimage如图,RxJava2的所有实现几乎围绕上图中最基础的UML关系图进行。其中1为Observable被观察者,2为Observer观察者,3为Emitter发射源。发射源可以被取消,发射源被取消之后,一般情况下Observer可能就收不到信息了。这三者关系,也就构成RxJava中一个核心的关系图,首先Observable订阅了Obs...
原创
博文更新于 2020.03.17 ·
139 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

一种插槽式的组件化框架中间件——SCC

SCC(SlotComponentCaller)是一种已铺好基本线路(组件管理),露出基本卡槽(组件接口),底层引流线路已打通,使用者尽管往卡槽插入(注册)到对应槽位,可对槽位进行拦截(interceptor),亦可通过底层阀门接通(AIDL跨进程)进行两个卡槽之间的接通的插槽式组件化框架。基本原理如下图所示: 在相同进程中,组件A可以通过组件管理工具ca...
原创
博文更新于 2020.03.17 ·
504 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

RxJava2的Observable变种之线程切换

RxJava的线程切换实质就是把不同的处理事务交由不同的线程去进行处理。代码流程看起来热仍然是像Observable.create(observableOnSubscribe).subscribe(observer)这种基本格式。那么线程切换流程在源码上是怎么做到的呢?另外,多个subscribeOn对应不同线程模型时,是都生效还是只对第一个线程有效,以及observeOn对应不同...
原创
博文更新于 2020.03.17 ·
1630 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

RxJava2的Observable变种之四大热发射

在关于Observable变种之五大金刚一文分析中,我们知道Observable在收到Observer订阅的时候,就会立即发送数据,既为冷发射。而热发射既只是为Observable和Observer之间建立了订阅管道,并不会直接发射数据,而是在有需要的时候才发射数据。而热发射的场景就有很多了,因为热发射我们可以决定发射时机、地点、数据。四大热发射集成自抽象Subject,而Sub...
原创
博文更新于 2020.03.17 ·
322 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Android性能优化:内存泄漏,只有知根才能知底

讲关于内存泄露之前,先抛出一个问题,两个相互引用的对象是不是一定会引起内存泄露?回答这个问题之前就需要理清内存泄露是怎么产生的。首先,分配了内存的对象是可达的,既可追溯到根节点的,其次,这个对象是没用的,既再也用不到这个对象。这个时候,垃圾收集器因为相关的对象是可达的,因此无法标记为垃圾,但它又没什么用,且占内存,因此这就是内存泄露。我们是不是可以这么想,如果已经分配的对象无法追...
原创
博文更新于 2020.03.17 ·
224 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

虚拟机从应用安装PMS说起

应用在安装的时候,主要由PMS(PackageManagerService)进行处理,大概就是通过守护进程installed调用一个工具dexopt对相关文件进行处理。对于Android 4.4以上的,会对Apk包中的所有dex文件进行dex2oat操作,最终形成本地机器语言代码,这种就是我们常说的AOT(AheadOfTime)、既运行前编译,得到一个ELF格式的o...
原创
博文更新于 2020.03.17 ·
229 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Android性能优化:注意同步锁的影响

同步锁的影响在我们的运行过程中,我们经常要加上同步锁,避免其他线程同时修改了数据。但是在要去获取锁的过程中,该锁被其他耗时线程占用或者其他线程占用了并等待其他线程唤醒,从而导致主线程获取不了锁等待最后发生ANR的情况。实际上,这种情况一般发生在使用了CountDownLatch的情况。CountDownLatch是一个计时器闭锁,该计数器是原子操作,同时只能有一个线程去操作该计数...
原创
博文更新于 2020.03.17 ·
788 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

符合Android消息驱动的Handler消息机制

Android应用程序是消息驱动的,主线程可能处于空闲等待状态,只要需要主线程处理操作了,一般都会通过消息将主线程唤醒。系统为每一个应用程序维护了一个消息队列(MessageQueue),应用程序的主线程不断地从消息队列中获取消息(Looper),然后对消息进行处理(Handler)。 ...
原创
博文更新于 2020.03.17 ·
194 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

RxJava2的Observable变种之过滤操作符

debounce:设定规定的时间内observable没有发射新的数据项,则debounce会把这个结果交给订阅者处理。因此debounce的应用场景可用在按钮点击上。如有时候按钮会被点击多次,那么设置一个响应时间,如100ms,如果认为没有连续点击多次,超过100ms的时间的时候,则默认为一次点击事件,供给listener处理。如100ms内连续点击多次,则旧的发射会被新的覆...
原创
博文更新于 2020.03.17 ·
151 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

统一的日志中间件——timber

开发一个工程,日志输出是先行者,无论在开发中还是在运行中,都少不了日志的身影。重构过程中,使用了timber作为日志输出,主要考虑到以下几点: 1. 我们在开发中经常用到第三方库,如OkHttp使用Logging Interceptor输出日志,RxJava使用onError输出异常日志,还有Android的系统Log日志,为了捕捉这些日志,timber这...
原创
博文更新于 2020.03.17 ·
585 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

为何重构

某某宝原始整个团队被挖走,而我们又是被挖去进去填坑的。一批人走,另一批进来的总要搞点新花样。对于Android客户端App,如果服务器架构变化、数据格式变化,那一般情况非重构不可,要不然在原先的基础上进行修修补补,终究会把坑填的越来越大。幸运的是,服务端方面并没有架构或者请求数据格式等的改动。因此Android客户端App是否重构变成工程本身是否到有必要重构的地步。重...
原创
博文更新于 2020.03.17 ·
114 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Android的图形之美(二)

上文我们提到,窗口绘图表面进行绘制的时候,会在画布上(非硬件加速如Canvas)的一个图形缓冲区中,然后SurfaceFlinger通过OpenGL图像块API来将这个图形缓冲区渲染到帧缓冲区中。我们对这个过程用图形来进行抽象分析。如下图,上层为生产,下层为消费,每一层有buffer为数据载体。其中,上层的buffer我们称为图形缓冲区、下层的buffer为帧缓冲区。...
原创
博文更新于 2020.03.17 ·
160 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Binder机制下的应用程序进程启动过程分析

我们在上面看到,无论是Activity、Service还是Provider,在Activity、Service启动、或者Provider加载的时候都可能涉及应用程序进程启动。又有很重要的一点,在这个过程中,新启动进程涉及的ApplicationThread binder对象常与ActivityManagerService进行进程间通信。在前面的分析中,我们知道,在启动...
原创
博文更新于 2020.03.17 ·
184 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

AShmem匿名共享内存为Binder机制添砖加瓦

Android的AShmem匿名共享内存是在Linux的共享内存基础上实现的。Ashmem的用处很多,如进行较大数据的从一个进程到另一个进程,那么Ashmem是不二的首选,首选避免binder进程间直接数据传递的一次数据拷贝,通过传递共享内存文件描述符来操作共享内存。如App进程和SurfaceFlinger进程是两个不同的进程,那么在进行View绘制的时候,如果采用...
原创
博文更新于 2020.03.17 ·
496 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

Android的图形之美(一)

在Android App中,我们经常会看到页面与页面之间的切换,页面弹出输入法以及页面弹出窗口等,这种情况实际就是一个Activity中对应了一个窗口,页面之间的切换既是Activity生命周期的调用,也是两个窗口之间哪个展示在前,同理的,输入法也是一个窗口,在页面弹出的也是一个子窗口,由此得出,在Android系统中,我们需要一个管理类用来管理窗口的,而这就是我们经...
原创
博文更新于 2020.03.17 ·
279 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

一种小而美的热修复方案中间件——AndFix

在我们走安全模式或者崩溃恢复的过程中、或者从请求OkHttp的Interceptor过滤中捎带探针得到要打补丁的时候,AndFix就派上用场了。 之所以是小而美,是因为该方案只能针对异常发生在java文件中,不针对Android资源,so库等进行修复。考虑到实际工程的需要,实际上这种修复方式已经满足工程的需要。如下图,左边为打补丁包的过程,ApkPatch...
原创
博文更新于 2020.03.17 ·
170 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多