- 博客(107)
- 资源 (2)
- 收藏
- 关注
原创 ContentProvider和BroadcastReceiver
ContentProvider一、概念特点 ContentProvider是四大组件之一,它并不能存储数据,只能为数据的存储或者添加等操作提供一个统一的接口,它可以供多个应用程序共享数据(跨进程数据的访问).在安卓设备中使用ContentProvider存储数据的应用有:通讯录、图片、音频等.同时也数据的变化也可以被监听到.二、优缺点优点: 数据访问统一接口:不需要关注数据存储
2017-09-06 22:17:27
988
原创 如何解决aar中的第三方依赖无法调用问题
如何解决aar中的第三方依赖无法调用问题背景: 近日公司需要做一个信息流的项目,嵌入到已经存在app中,为了让信息流的模块进行独立,需求是将信息流模块打包成aar形式,单独集成到主项目中.问题: 在集成的过程中遇到了一些问题,如果将aar放到lib目录下,aar里面依赖的第三方库无法调用,因为编译aar的时候,并没有将第三方依赖的库编译到aar中,aar中只有源代码\资源文件等.
2017-09-01 15:00:04
15962
4
原创 Android常用异常及解决方案
Android常用异常及解决方案1、什么是异常? 异常是指在程序运行中所出现的错误,这些错误会干扰到指令的正常执行,从而造成程序异常退出,这些异常出现的场景比如有:文件找不到,网络连接失败,非法参数等.2、异常来源 就Java语言来说,所有的异常都继承自Throwable3、Android常见异常分类1-编译时错误(eg:ClassNotFoundException/layo
2017-08-31 21:56:55
800
原创 Android Multidex原理及实现
Android Multidex原理及实现一、什么是分包,分包能解决什么问题? 正常apk打包后的文件目录是含有AndroidManifest.xml、R、resource.arcs(资源的索引)、assets、lib、classes.dex这几个模块,而分包后又是怎么样的情况呢?分包之后dex将会多出几个dex,出现classes2.dex,classes3.dex等. 分
2017-08-28 22:09:59
1840
原创 大型企业所需掌握技术
1、彻底掌握Android多分包技术MultiDex-用Ant和Gradle分别构建(一):http://blog.youkuaiyun.com/mynameishuangshuai/article/details/527030292、彻底掌握Android多分包技术MultiDex-用Ant和Gradle分别构建(二):http://blog.youkuaiyun.com/mynameishuangshuai/arti
2017-08-09 21:08:31
377
原创 7月总结以及接下来的学习计划
7月总结以及接下来的学习计划 转眼间,7月又快过去了,6月还说好博客会继续写下去,可是一忙再忙又给延误了,自己的学习计划也没得到很好的落实.检讨中…..7月总结: 7月主要把时间都花在熟悉公司的项目中,由于开发的是SDK,跟业务相关联的比较多,需要去熟悉SDK的架构等等.这几天天天晚上加班到10点才回去,大部分都是在搞公司的东西,自己学习的时间比较少.想想公司还是挺人性化的,对我
2017-07-20 09:24:37
842
原创 6月总结
6月总结 六月到现在一直没有新的博客发布,原因是作为身处毕业季的我,6月可谓是即开心又悲伤的一个月,大家各奔东西,为了完成自己的梦想,有人去了北上广,有人去新二线城市,不管去何处,大家都怀揣着一颗美好的心,而我也经过5月和6月的努力进入了二三四五,相比刚出来实习的那个阶段,从一个懵懂的小少年渐渐地适应了这个社会,适应了周围的工作环境.这篇文章就不讲废话了,接下来我介绍下是如何做面试准备的.一
2017-07-02 17:19:21
582
原创 架构设计九之策略模式、迭代器模式
前言 这篇博客介绍策略模式以及迭代器模式策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式让算法独立于使它的客户独立而变化角色 环境(Context)角色: 持有一个Strategy的引用 抽象策略(Strategy)角色 这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的
2017-05-11 19:41:30
731
原创 架构设计八之状态模式
前言 这篇博客继续学习状态模式。定义 当一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。又称状态对象模式,状态模式是对象的行为模式。角色 环境(Context)角色 上下文:定义客户端所感兴趣的接口,并且保留一个具体状态类的实例。这个定义了对象的当前状态 抽象状态(State)角色 定义一个接口,用以封装
2017-05-10 15:38:36
426
原创 架构设计七之解释器模式、模板模式、观察者模式
前言 这篇博客继续学习解释器、模板、观察者三种模式。解释器模式 解释器是一种用的比较少的行为模式,其提供了一种解释语言的语法,或者表达式的方式。该模式定义了一个表达式的接口。使用场景使用场景最为频繁的就是手机号码验证移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188联通:130、131、132、152、
2017-05-09 12:12:52
441
原创 架构设计六之命令模式
前言 定义:将请求封装成一个对象,从而让用户使用不同的请求吧客户端参数化。请求排队或者记录请求日志,以及支持可撤销的操作。模式的使用场景 1. 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。 2. 系统需要在不同的时间指定请求、将请求排队和执行请求。 3. 系统需要支持命令的撤销(Undo)操作和恢复(Redo)
2017-05-08 09:50:22
548
原创 架构设计五之建造者模式和责任链模式
前言 建造者模式在设计模式中还算是一个用的比较多的设计模式,建造者设计模式的核心在于隐藏内部构建细节,通过外部的Builder来实现构建。Builder负责Product类对象的具体过程构建,Director负责指导Build,要求Builder按照其指定的顺序去完成Produt的构造。最后通过Builder返回建造后的结果。标准建造者模式/** * 建造者角色 * 工人接口,定义
2017-05-07 14:22:00
1733
原创 架构设计四之面向切面编程
前言 大家都知道OOP,它是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成(百度百科)。 OP和AOP是什么关系呢?在OOP的世界中,问题或者功能都被划分到一个一个的模块里边。每个模块专心干自己的事情,模块之间通过设计好的接口交互。从图示来看,OOP世界中,最常见的表示比如:上面的图为Android Framework中的模块图,
2017-05-06 12:28:49
508
转载 架构设计三之app应用的启动过程分析
前言首先说一下看源码的方式,首先明确看源码的目的是为了更好的指导上层开发。 看android的系统源码,重要的是理解整体的执行流程, 不要纠结于代码细节。太纠结于代码细节, 对指导上层开发并没有指导意义。从入口main()到Applicaiton的onCreate()方法被调用ActivityThread提供两个核心内部类 ApplicationThread和 Hpublic final clas
2017-05-05 19:29:29
393
原创 架构设计二之原型模式、单例模式
前言 上篇文章介绍了简单工厂模式、工厂方法模式以及抽象工厂模式,接下来就继续学习原型模式与单例模式:模式1、原型模式: 原型模式之前在Java设计模式的板块也讲过,这里再拿出来讲一下:原型模式属于创建型模式,用原型的实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。通俗的意思:复制一个一模一样的对象出来。目的是为了保护最原始的那一份存档,隐藏复制过程。具体的实现过
2017-05-05 16:43:32
486
原创 架构设计一之简单工厂、工厂方法模式
前言 今天开始正式步入了架构设计的学习海洋,架构设计更多的是站一个设计者的角度去看待问题,比如说一个三方框架,它其中肯定是用了很多设计模式,当设计者在最出设计的时候总会去考虑到代码的安全性,模块间的耦合度不能太高,当然上面也只是我个人的理解。 学习架构方面的知识之前,我们得会去画UML图,因为当代码结构变复杂后,没有一个清楚的设计图,过段时间哪怕是设计者都会不清楚当时自
2017-05-05 12:35:46
562
原创 性能优化二十四之应用启动速度优化
前言 应用启动速度在日常开发中也是影响用户体验最重要的一环,市场上很多的应用启动的时候可能都会花上3,4秒,其实这是很影响用户体验的,用户等不了那么长的时间去等待界面加载,用户就会难免会卸载该应用,造成损失。1、应用启动方式: 1)冷启动:当直接从桌面上直接启动,同时后台没有该进程的缓存,这个时候系统就需要重新创建一个新的进程并且分配各种资源。 2)热启动
2017-05-04 14:37:56
2046
原创 性能优化二十三之Service进程防杀死
前言 Service作为四大组件之一很多安卓开发者对他肯定是又爱又恨,爱在它可以帮助我们去处理常驻后台的任务操作,比如说推送服务,心跳传输等,恨在当Servcie遇到360、腾讯管家之类的杀毒软件,变得脆弱,很容易被杀死,或者当用户手机锁屏会导致服务暂时停止运行。 我们常用的进程守护的套路无外乎以下几种:一、提高进程的优先级数值 对于Service被系
2017-05-03 17:22:29
1591
原创 性能优化二十二之dex热修复原理
前言 热修复作为当下热门的技术,在业界内比较著名的有阿里巴巴的AndFix、Dexposed属于阿里系,腾讯QQ空间的超级补丁技术和微信的Tinker属于腾讯系。最近阿里百川推出的HotFix热修复服务就基于AndFix技术,定位于线上紧急BUG的即时修复,这两大系的主要区别在哪儿呢?阿里系着重从底层C的二进制入手(详细还没有去了解),而腾讯系的着重从Java的类加载机制入手。说到这里
2017-05-03 10:31:36
876
原创 性能优化二十一之安装包性能优化
前言 安装包性能优化为了减少应用程序安装包的大小,不仅仅可以降低用户的网络数据流量还减少了下载等待的时间。毋庸置疑,尽量减少程序安装包的大小是十分有必要的。通常来说,减少程序安装包的大小有两条规律:要么减少程序资源的大小,要么就是减少程序的代码量。下面从几个方面来介绍: 1、图片压缩: 图片:apk里面的资源图片,apk里的图片大小需要UI去进行压缩。
2017-05-02 13:04:13
956
原创 RSA加解密
前言 最近项目中需要利用RSA进行加解密,RSA是目前最流行的,也是最为安全的一种加密方式,RSA利用公钥和私钥来作为密钥,可以私钥加密公钥解密,也可以私钥解密公钥加密。 坑点: 当服务器端给到我私钥的时候(利用openssL生成),我无论怎么去解析私钥,都会抛出私钥非法,后来发现在生成私钥的时候并没有转换成PCK8标准的,由于后台是php,php中是不
2017-05-01 15:58:44
1001
原创 Dagger2基础与进阶
前言 Dagger2依赖注入框架,为了降低程序间的耦合度,防止产生牵一发而动全身的问题。除此之外,它同样还有很多有点:增加开发效率、省去重复的简单体力劳动 首先new一个实例的过程是一个重复的简单体力劳动,dagger2完全可以把new一个实例的工作做了,因此我们把主要精力集中在关键业务上、同时也能增加开发效率上。省去写单例的方法,并且也不需要担心自己写的单例方法是否线程
2017-05-01 14:24:50
377
原创 Android与H5互调
前言 微信,微博,微商,QQ空间,大量的软件使用内嵌了H5,这个时候就需要了解Android如何更H5交互的了;有些外包公司,为了节约成本,采用Android内嵌H5模式开发,便于在IOS上直接复用页面,最终解决成本。 为什么学android也要学h5? Android很多软件都有内嵌H5的,有什么用处、优势?节约成本,提高开发效率。实现的原理是什么?
2017-04-28 00:27:29
2017
原创 ViewDragHelper实现QQ侧滑效果
前言 侧滑的实现方式有很多方式来实现,这次总结的ViewDragHelper就是其中一种方式,ViewDragHelper是2013年谷歌I/O大会发布的新的控件,为了解决界面控件拖拽问题。下面就是自己学习写的一个实现类似于QQ侧滑效果的实现。activity_main.xml:<com.itheima.tencentqq52.drag.DragLayout xmlns:android
2017-04-27 16:45:10
371
原创 性能优化二十之数据传输效率优化-FlatBuffers
前言 数据传输效率优化对于很多人来说还是比较陌生的,我最近也正在学习相关的优化技术,在这里集广大网友的智慧来做一个总结。问题引入: 为什么要对数据的传输进行优化,相信百分之99的安卓开发工程师都是用的json进行数据的传输,利用Gson或者fastJson作为序列化及反序列化的工具,但是这样对时间和性能上是有些影响的,主要在内存的浪费和CPU计算机时间的占用,为什么会影响呢?
2017-04-27 00:08:58
2918
原创 实现自己的Handler、Looper、MessageQueue
前言 最近研究了Android中的消息机制的源码,理解了内部的调用过程以及内部原理后,试着用java实现了类似于Android的消息机制。 Handler.java:public class Handler { private MessageQueue mQueue; private Looper mLooper; //Handler的初始化,在主线程完成 public Hand
2017-04-26 10:49:06
459
原创 性能优化十九之多线程优化-HandlerThread、IntentService、Loader简介
前言 除了AsyncTask之外,Android还提供了其他的一些线程操作来方便开发者使用,接下来进行总结一、HandlerThread: HandlerThread是用来替代Thread的,本身HandlerThread就是继承Thread的,但是与Thread的区别在于,内部有一个Looper成员变量,通过Thread+Looper来实现,实际上就是HandlerTh
2017-04-25 17:24:42
766
原创 性能优化十八之多线程优化-AsyncTask源码分析
前言 做过安卓开发的没有人不知道AsyncTask类,它是一个处理异步任务极为强大的类,Andorid是个单线程模型的系统,但是为了提高UI的流畅度,也支持多线程操作,但前提是更新UI的线程必须是主线程,在子线程中无法更新UI,会抛出异常,而AsyncTask就是为此而生的。 AsyncTask内部封装的其实就是Thread+Handler,相信在没有AsyncTask之前
2017-04-25 14:21:02
648
原创 多线程之生产者与消费者模式
前言 生产者-消费者模式是一个经典的多线程设计模式,它为多线程的协作提供了良好的解决方案。在生产者-消费者模式中,通常有两类线程,即若干个生产者线程和若干个消费者线程。生产者线程负责提交用户请求,消费者线程负责处理用户请求。生产者和消费者之间通过共享内存缓冲区进行通信。 生产者-消费者模式中的内存缓冲区的主要功能是数据在多线程间的共享。此外,通过该缓冲区,可以缓解生产者和消
2017-04-18 23:09:22
636
原创 性能优化十七之图片压缩优化
前言 Android开发中遇到最多的问题,遇到最多的问题,面试被问的最多的问题就是关于图片的处理,防止内存溢出等。博客中也转载了很多大牛写的关于如何加载大图的文章,写的也很好,这里不做过多介绍,这里就简单的谈下如何去使用系统的API进行压缩优化,相关的知识大牛都介绍了很多。这里做些关于图片加载优化的博客总结,想要学习相关图片压缩优化可以看以下博客: Android压缩图片到100K以
2017-04-17 20:50:26
744
原创 Looper、MessageQueue、Handler机制简要分析
前言: 在Android开发中Handler、Message是非常常见的,常用于定时执行任务、主线程更新UI等操作。之前自己一直都是在停留在使用上,这次有空翻翻源码自己了解下相关原理,对自己也会有一定的提高。 首先整个应用的入口函数是ActivityThread的main函数,UI线程的消息循环也是在这个方法中创建的:public static void main(Stri
2017-04-16 23:59:05
422
原创 性能优化十六之Wake_Lock唤醒锁以及JobScheduler使用
前言 上一篇博客记录了电量优化中的第一种优化,把一些不需要及时和用户交互的一些操作,放到当用户插上电源的时候。根据自己目前的知识了解,只知道三种优化方式,第二种和第三种方式接下来进行介绍。第二种方式:网络类型选择优化 目前大部分手机都支持4G网络,殊不知蜂窝移动信号是在所有的网络类型中是最消耗电量的,很多人在使用手机的过程中,发现如果一直在使用4G移动网络,电量会持续不了多久就没
2017-04-14 20:57:05
14223
1
原创 性能优化十五之电量优化案例
前言 之前说了那么的电量优化理论,到现在自己都没有去做个小案例实践一下,这次博客的内容是根据实际的使用环境想出的一个小案例,方便自己去理解,电量优化该怎么用?问题抛出: 为了省电,有些工作可以放当手机插上电源的时候去做。往往这样的情况非常多。像这些不需要及时地和用户交互的操作可以放到后面处理。比如:360手机助手,当充上电的时候,才会自动清理手机垃圾,自动备份上传图片、联系人等到云端
2017-04-07 16:57:31
1067
转载 Android完美加载大图
1. 引子前几天跟服务端的一个妹子联调接口,服务器配置一张图片,几十KB就行,她问我图片从哪里找,我告诉她先随便在网上找个图片链接就行了。结果一运行程序,就崩溃了,出现了下面的异常。java.lang.OutofMemoryError内存溢出OOM,我当时一脸懵逼。一脸懵逼于是拿着后台返回的链接去查看了一下图片,是一张6M的壁纸。我内心几乎是崩溃的这只是一个简单的联调,而在联调过程中操作
2017-03-22 18:02:33
672
原创 Recyclerview展开收起
前言 几乎所有的app都会遇到列表的展开与收起功能,最近公司的产品也用了,相信大家都知道Recyclerview已经逐步替代了listview成为主流,原因不仅仅是在于它的缓存机制,还在于它对于条目的数据更新设置了更多动画。接下来我们就来实现一个万能的条目展开与收起。这里就不多BB了,直接上代码,布局文件就太简单了,不贴代码了。public class MainActivity exten
2017-03-22 17:51:20
8956
2
转载 HashMap详解
HashMap在Java开发中有着非常重要的角色地位,每一个Java程序员都应该了解HashMap。 本文主要从源码角度来解析HashMap的设计思路,并且详细地阐述HashMap中的几个概念,并深入探讨HashMap的内部结构和实现细节,讨论HashMap的性能问题,并且在文中贯穿着一些关于HashMap常见问题的讨论。 读完本文,你会了解到: 1. HashMap的设计
2017-03-22 15:38:23
649
原创 SmartGit 破解
前言现在绝大部分公司都是通过git去做版本管理,极少的使用SVN,但是很多人对git命令很是头痛,所以就衍生出了可视化的工具,例如下面要说的SmartGit,用过SmartGit的人都知道,这种软件只有30天的免费试用期,过了30天就要输入注册码。但是可以通过一些方法继续使用,仅限个人使用。1、找到C:\Users\Intellilink-Kiven\AppData\Roaming\syntevo\
2017-03-20 17:38:16
6165
1
转载 RxJava 2.0
前言 之前写RxJava相关文章的时候,就有人想让我谈谈RxJava2.0的新特性,说实话,一开始我是拒绝的。因为在我看来,RxJava2.0虽然是版本的重大升级,但总归还是RxJava,升级一个版本还能上天是咋的?了解一下它的更新文档不就好了么?真的有必要单出一篇文章来谈这个么? 但是详细的了解了RxJava2.0以及部分源码之后,我觉得还是有必要对RxJava2.0做一个说明,帮助大
2017-03-20 17:21:46
624
原创 Android调用系统相册或拍照实现头像更换
Android调用系统相册或拍照实现头像更换更换头像功能相信每个app,都会用到,这里我也做下总结,记录下。我这里是将代码从项目中抽取出来,难免可能会涉及到mvp相关的名词,谅解。1、展示更改头像选择对话框:@Overridepublic void showModifyHeadIconDialog() { AlertDialog.Builder builder = new AlertDia
2017-03-14 20:36:45
1624
原创 RxBus
RxBus在讲解RxBus之前先去解决几个问题。1、Rxbus的概念 乍一听上去,Rxbus是一个库,但是其实他并不是一个库,而是一种思想,利用RxJava中的subject来实现了类似于OTTO或者EventBus的功能2、其次为啥要用Rxjava去实现呢? 现在很多项目中都在使用RxJava,利用RxJava去实现EventBus或者otto的相同功能,无疑不减少了第三方库的依赖
2017-03-09 20:32:43
544
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人