LeakCanary是一个开源的,可以用来检测activtiy或者fragment内存泄漏的框架,本篇我们来学习这个框架的源码。 debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-alpha-2' } 然后在application执行如下代码: LeakCanary.install(this); 然后出现内存泄露时候就会出现通知弹窗 2.源码分析 2.1 LeakCanary#install public static @NonNull RefWatcher return RETRY; } if (gone(reference)) { return DONE; } //关键点2 gcTrigger.runGc RETRY_LATER; } } 1)首先post到主线程,通过在5S内尝试弹一个toast看是否成功,来决定是否立即获取内存快照,如果超过5S,说明主线程还有很多任务,延迟再进行快照 2)
但是存到本地磁盘中是一个耗时的IO操作,对于主线程来说,这是不能忍的,所以不能用这种方式 2、 这个方式在跟第一个方式的区别在于,主线程上的maincontext与NSPersistentStoreCoordinator 三、MagicRecord源码解析 + (void) setupCoreDataStackWithStoreAtURL:(NSURL *)storeURL { if ([NSPersistentStoreCoordinator
---- 基本框架 Rxjava 有四个基本的概念 Observable (可观察者,即被观察者) Observer (观察者) subscribe (订阅) 通过该方法,将 Observable onError 方法与 onComplete 方法可以说是互斥的,调用了其中一个方法就不会调用另外一个方法 ---- 源码解析 基本使用 在讲解原理之前,我们先来看一下 Rxjava 的一个基本使用。 Null values are generally not allowed in 2.x operators and sources.")); return; } Null values are generally not allowed in 2.x operators and sources."); } if (! onNext(Integer value) { Log.d("xujun", value.toString()); if (value >=2)
这里提供我整理的源码GigHub下载链接, 觉得有需要的朋友可以直接下载Demo,而不用看本篇文章介绍。欢迎作出进一步优化与分享,笔者这个尝试也是得益于两个大神的文章。 单线程生物:FMDatabase类 ---- 1.1 对FMDB的FMDataBase类进行一层封装 1.1.1 源码 DataBase.h // // DataBase.h // FMDBDemo ,person.ID]; [_db close]; } @end 1.1.2 知识点总结 静态变量(这里是静态实例) http://www.jianshu.com/p/aec2e85b9e84 executeQuery:[NSString stringWithFormat:@"SELECT * FROM car where own_id = %@",person.ID]]; 1.2 模型层 1.2.1 源码 2.
程序的启动基本都是通过构建主机的方式,比如之前的Web主机或者后来的泛型主机,在Minimal API中同样可以进行这些操作,比如我们遴选公务员模拟一下之前泛型主机配置Web程序的方式使用IOC的时候会使用其他三方的 IOC框架,比如大家耳熟能详的Autofac,我们之前也介绍过其本质方式就是使用UseServiceProviderFactory中替换容器的注册和服务的提供,在Minimal API中可以使用如下的方式去操作 的形式,所以Minimal Api自动处理并输出返回的信息,遴选公务员其实只要满足委托类型的它都可以处理,接下来咱们来简单一下,首先是本地函数的形式 它的作用就是简化我们解析Http请求信息也是MVC框架的核心功能
由于本人也是初入angular2不久,很多问题也许解决了,确不知其原由,也有一些问题,解决了后面又出来同样的错误,关于这些,请谅解. 关于这个问题,我自己也是想了很久,总算是能用上了, 想在angular2中引用jquery的话,高大上的一个方法是,在package.json中的dependencies中写入,执行cnpm i;安装;
一、上传项目到github 将框架中的主要文件放入到一个指定文件夹中,比如叫Classes或者Lib都可以 目录结构 打开终端,cd到框架目录 cd /Users/lxf/xxxx/LXFPhotoHelper // git push origin 版本号 git push --tags 二、创建并修改podspec文件 创建Spec文件 // 名称一般与工程名称保持一致 pod spec create 框架名称 push后面加上--allow-warnings来忽略它们 pod trunk push LXFPhotoHelper.podspec --allow-warnings 如果出现如下信息,则说明你的框架名字已被占用 上传成功后会自动帮我们更新本地仓库,如果无法搜索到自己的框架,可以先删掉本地的索引文件后再搜索一次 rm ~/Library/Caches/CocoaPods/search_index.json 当使用 pod search 命令可以搜索自己的框架时, 那么就意味着审核通过了
那么这篇文章就说说如何用webpack来打包引入第三方框架(类库)。 如果单纯的引入jQuery或者其他第三方类库,在打包的时候webpack会把它一起打包进我们的main.js,也就说,如果我们引入两三个框架,两三个UI库,那么我们的集成包会很大,页面的加载时间也会很长 所以在学会引入的同时,还要知道如何把第三方类库从我们的业务逻辑包中抽离出来。 而且每一个需要jQuery的页面都需要引入的话好麻烦,那么我们可以使用ProvidePlugin来实现一次引入全局使用,而且通过插件的方式来引入第三方类库,如果你不使用它的话,webpack就不会打包它 但是在webpack4时代,已经取消了这个插件取而代之的是splitChunks 和runtimeChunk ,那么我们就来看一下,在webpack4的环境下,如何抽离多个第三方类库。
那么这篇文章就说说如何用webpack来打包引入第三方框架(类库)。 如果单纯的引入jQuery或者其他第三方类库,在打包的时候webpack会把它一起打包进我们的main.js,也就说,如果我们引入两三个框架,两三个UI库,那么我们的集成包会很大,页面的加载时间也会很长 所以在学会引入的同时,还要知道如何把第三方类库从我们的业务逻辑包中抽离出来。 而且每一个需要jQuery的页面都需要引入的话好麻烦,那么我们可以使用ProvidePlugin来实现一次引入全局使用,而且通过插件的方式来引入第三方类库,如果你不使用它的话,webpack就不会打包它 但是在webpack4时代,已经取消了这个插件取而代之的是splitChunks 和runtimeChunk ,那么我们就来看一下,在webpack4的环境下,如何抽离多个第三方类库。
>(); //记录每个类中的订阅方法信息 putIndex(new SimpleSubscriberInfo(net.sxkeji.shixinandroiddemo2. 总结 本篇文章根据源码详细地了解了 EventBus 3.0 的源码,经过前面对源码的分析,现在看这个类图理解了吧: ? 读源码最好是打着断点走一遍,然后边走边写注释,最后整理成文章。 带有注释的源码地址 Thanks 本来打算自己画流程图和类图的,但发现前辈画的已经很完美的,而且我也有点困,就借用一下吧 -。-。 最后类图引用自 EventBus 源码解析,表示感谢!
一、前言 上一节已经将raincat demo工程运行起来了,这一节来分析下raincat的源码 二、协调者启动过程 主要就是在启动类中通过如下代码来启动 netty nettyService.start () 三、参与者启动过程 1.参与者启动时序图 参与者在启动过程中,主要做了如下4件事: (1)保存SpringContext上下文 (2)通过加载spi,来使用用户自定义配置 (3)启动Netty客户端 2.保存Spring上下文 源码见 SpringBeanUtils 类,设置Spring 上下文,并提供spring bean 的注册与获取方法。
我们在使用Taro开发小程序时,有时候需要用到ico图标,但是当Taro UI 自带的icon不能满足我们的要求时,我们需要导入第三方字体图标库。 如何导入呢? ),代码如下: /* icon.scss */ @font-face { font-family: 'FontAwesome'; /* 自行安装第三方字体图标库 */ src: url(' /assets/fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('. v=4.7.0') format('truetype'); font-weight: normal; font-style: normal; } /* 根据第三方字体图标库编写 */ /* 举例 {{ size: 25, color: '#78A4FA', prefixClass:'fa' ,value: 'address-book-o', }} /> 以上便是在Taro框架中使用第三方字体图标库的配置方法
Exectors框架 源码分析 1. 在阅读源码时做了大量的注释,并且做了一些测试分析源码内的执行流程,由于博客篇幅有限,并且代码阅读起来没有 IDE 方便,所以在 github 上提供JDK1.8 的源码、详细的注释及测试用例。 2. 由于个人水平有限,对源码的分析理解可能存在偏差或不透彻的地方还请大家在评论区指出,谢谢! 1. 2. Exector 可以看到,Exector 属于一个接口,其实它里面只有一个 void execute(Runnable) 方法。 2.
Colly是一个使用golang实现的数据抓取框架,我们可以使用它快速搭建类似网络爬虫这样的应用。本文我们将剖析其源码,以探析其中奥秘。 (转载请指明出于breaksoftware的csdn博客) Collector是Colly的核心结构体,其中包含了用户对框架行为的定义。 strings.HasPrefix(e, "COLLY_") { continue } pair := strings.SplitN(e[6:], "=", 2) if f, ok : := range c.DisallowedDomains { if d2 == domain { return false } } if c.AllowedDomains == nil || len(c.AllowedDomains) == 0 { return true } for _, d2 := range c.AllowedDomains { if d2 == domain
虽然经常用koa作为NodeJS Web项目的框架,但一直都是只知道怎么做,但并不知道它究竟是怎么实现的。今天花了些时间来研究它,在这里记录一下。 ; } function* outer2() { yield'open' yield* inner() yield'close' } var gen = outer2() gen.next().value callback(f1, f2); }); }); } readFiles(function(f1, f2){ console.log('finished'); } koa的源码解读 先看一下koa最简单的使用示例。 参考文档 阮一峰的ECMAScript 6 入门 - Generator 函数 阮一峰的ECMAScript 6 入门 - 异步操作和Async函数 koa源码 koa-compose源码 co源码
( ps :本文篇幅过长,可能会引起不适,请在家长的陪同下观看) 0010B Volley 使用方法 在长篇大论地解析 Volley 框架源码之前,我们先来看看平时是怎样使用 Volley 的。 0011B 在这先把 Volley 框架中几个重要的类的作用讲一下,以便看源码时能够更加明白: RequestQueue :这个大家一看都明白,用来缓存 request 的请求队列,根据优先级高低排列; 基本上在整个 Volley 框架中至关重要的类都讲到了。当然,还有一些 NetworkImageView 、ImageLoader 等源码还没解析。 在这还给出了一张整个 Volley 框架大致的网络通信流程图,对上面源码没看懂的童鞋可以参考这张图再看一遍: Volley框架大致流程图 最后,只剩下总结了。 0101B References Volley 源码解析 volley 框架剖析(四) 之HTTPCache设计 Android Volley完全解析(四),带你从源码的角度理解Volley Etag与
Exectors框架 源码分析 1. 在阅读源码时做了大量的注释,并且做了一些测试分析源码内的执行流程,由于博客篇幅有限,并且代码阅读起来没有 IDE 方便,所以在 github 上提供JDK1.8 的源码、详细的注释及测试用例。 2. 由于个人水平有限,对源码的分析理解可能存在偏差或不透彻的地方还请大家在评论区指出,谢谢! 1. 2. Exector 可以看到,Exector 属于一个接口,其实它里面只有一个 void execute(Runnable) 方法。 2.
OSCache 是一个受到争议的开源缓存框架,OpenSymphony 网站已经关闭(OpenSymphony 可是诞生过 Quartz、WebWork、SiteMesh 和 OGNL 等数个非常有名的框架的 在 JavaEE 的缓存框架领域,似乎已经是 EhCache 等其它支持分布式的缓存框架的天下了,OSCache 垂垂老矣? 但是 OSCache 的源代码依然值得一读,一度作为最常用的缓存框架,代码量却不大,绝大部分类一天的时间就可以详详细细地阅读完。 它们之间的关系如下: 值得说明的是,这张图虽然简单,却很有借鉴意义,再复杂的缓存框架,它往往都逃脱不出这样的最基本的设计。 情况 2:如果 updateState 状态是 updating: 那么在配置为阻塞策略的情况下,或者 cache entry 状态为 NOT_YET,都需要等待这一次 updating 的完成: do
2. 谷歌 Test 单元测试 基于 Google Test 框架的单元测试示例,展示如何验证 serialize 函数的正确性。 lgtest_main -pthread .PHONY:clean clean: rm -f js test 结果如下: 小结:使用 Google Test 代码的好处 使用 Google Test 框架进行单元测试的主要好处包括 2. 这些参数会在回调触发时由 muduo 框架自动提供。 6.3 如果不使用 std::bind,还有什么选择?
源码分析 pull-to-refresh.swift - 是一款非常易于开发者使用的下拉刷新和加载更多组件。 AutoLayout Masonry - Masonry是一个轻量级的布局框架,拥有自己的描述语法,采用更优雅的链式语法封装自动布局,简洁明了并具有高可读性(使用介绍1使用介绍2),iOS自适应前段库 EasyPeasy.swift - 编程方式自动布局框架库。 DTCoreText源码解析。 CSGrowingTextView - 用作即时通讯文本框和评论文本框使用,可以显示多行输入。 YYText - 功能强大的 iOS 富文本框架。