Android系统架构
醉墨重生
世间万物终有循环,太极阴阳始的初衷。
展开
-
AOP面向对象切面编程之淘宝京东网络处理
AspectJ :面向切面的框架1.1下载:http://www.eclipse.org/downloads/download.php?file=/tools/aspectj/aspectj-1.8.13.jar 1.2直接安装 1.3新建应用 然后在 build.gradle 里面添加配置 :这里复制完整代码apply plugin: 'com.android.applicat...原创 2018-03-04 16:58:39 · 474 阅读 · 0 评论 -
开发模式之MVP
MVC使用ServiceApi接口public interface ServiceApi { // 接口涉及到解耦,userLogin 方法是没有任何实现代码 @POST("loginuser")// 登录接口 GET(相对路径) @FormUrlEncoded Observable<Result<UserInfo>> query...原创 2018-04-09 11:03:20 · 397 阅读 · 0 评论 -
OKHttp源码精髓之拦截器分析
上一篇文章我们知道okhttp异步真正执行的实际是RealCall这个类的 getResponseWithInterceptorChain 方法Response getResponseWithInterceptorChain() throws IOException { // 拦截器的一个集合 List<Interceptor> interceptors = n...原创 2018-04-02 10:14:32 · 306 阅读 · 0 评论 -
观察者设计模式之观察数据的插入
观察者设计模式之推拉模式推模式:如:用户关注微信号微信公众号: 多个人去订阅我们的公众public class WXPublicObservable { private List&lt;IWXUser&gt; mUsers; public WXPublicObservable(){ mUsers=new ArrayList&lt;&gt;(); ...原创 2018-03-27 12:20:39 · 437 阅读 · 0 评论 -
okhttp上传进度和自定义缓存
上传进度的实现首先简单使用public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); set...原创 2018-04-02 18:13:23 · 513 阅读 · 0 评论 -
代理设计模式
1.代理设计模式 - 定义为其他对象提供一种代理,以控制对这个对象的访问,分为静态代理和动态代理。2.静态代理银行办卡 - 角色划分 2.1. 目标接口 2.2. 代理对象 - 银行的工作人员 2.3. 被代理的对象 - 我目标接口public interface IBank { /** * 申请办卡 */ public void...原创 2018-03-27 17:06:09 · 295 阅读 · 1 评论 -
Glide源码分析和时序图
使用就不介绍了Glide.with(this)源码分析 分析下重要的源码:看下第3步 SupportRequestManagerFragment getSupportRequestManagerFragment(final FragmentManager fm) { SupportRequestManagerFragment current = (Support...原创 2018-04-10 17:48:55 · 932 阅读 · 0 评论 -
原型设计模式
定义:(拷贝) 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 通过拷贝复制出一个新的对象。(拷贝)最简单的设计模式。又分为浅拷贝和深拷贝浅拷贝: 浅拷贝,就是类的类对象实例,是没有被拷贝的,他们还是公用一份user代码public class User implements Cloneable { public String userName...原创 2018-03-28 12:31:41 · 541 阅读 · 0 评论 -
okhttp单线程下载和多线程下载
单点下载 OkHttpManager okHttpManager = new OkHttpManager(); Call call = okHttpManager.asyncCall("http://acj3.pc6.com/pc6_soure/2018-3/com.ss.android.essay.joke_689.apk"); call.enqueue...原创 2018-04-03 15:56:53 · 3768 阅读 · 0 评论 -
rxjava基本使用和源码分析
先举个案例给下载的url加水印首先添加依赖: compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.1.7'一般写法public class MainActivity extends AppCompatActivity { priva...原创 2018-04-04 13:41:52 · 268 阅读 · 0 评论 -
手写rxjava事件变换
首先还是看怎么使用 Observable.just("http://d.paper.i4.cn/max/2016/10/10/15/1476085552237_716159.jpg") .map(new Function<String, Bitmap>() { @Override ...原创 2018-04-04 17:42:33 · 618 阅读 · 0 评论 -
迭代器设计模式之构建通用底部的BottomTabNavigationBar
1.模式定义:提供一种方法顺序访问一个容器中的各个元素,而又不需要暴露该对象的内部显示(如List,Objcet数组,set)。首先看下简单的使用一般写法:比如百度网盘登录可以用微信和qq,假设qq使用的是List保存数据,和微信使用的是数组保存数据用户信息public class UserInfo { public String userName; pub...原创 2018-03-29 14:30:54 · 466 阅读 · 0 评论 -
责任链模式和外观模式
1.责任链设计模式 使多个对象都有机会处理请求,将这些对象连成一条链,并沿着这条链处理该请求,只道有对象处理他为止。2.门面设计模式 要求一个子系统的外部与其内部通信必须通过一个统一的对象进行,又称之为外观模式,提供一个高层次的接口,使得子系统更易于使用。 说白了就是方法封装。还是以百度云盘登录有qq和微信两个系统为例userInfo用户信息public class ...原创 2018-03-29 16:29:13 · 490 阅读 · 0 评论 -
自己动手线程调度切换之子线程切换
使用 Observable.just("http://d.paper.i4.cn/max/2016/10/10/15/1476085552237_716159.jpg") .map(new Function<String, Bitmap>() { @Override ...原创 2018-04-05 15:22:18 · 817 阅读 · 0 评论 -
自己动手线程调度切换之主线程切换
observeOn(AndroidSchedulers.mainThread())源码分析AndroidSchedulers.mainThread()源码分析 public static Scheduler mainThread() { return RxAndroidPlugins.onMainThreadScheduler(MAIN_THREAD); ...原创 2018-04-05 16:50:27 · 1092 阅读 · 0 评论 -
retrofit基本使用和源码设计模式分析
基本使用GitHub网址:https://github.com/square/retrofit 添加依赖: compile ‘com.squareup.retrofit2:retrofit:2.3.0’ compile ‘com.squareup.retrofit2:converter-gson:+’ compile ‘com.squareup.okhtt...原创 2018-04-07 10:37:54 · 640 阅读 · 0 评论 -
装饰设计模式 - RecyclerView添加头部和底部
定义:装饰设计模式也称包装设计模式,用来动态的扩展对象的功能,也是继承关系的的一种替代方案之一。 说个大白话就是,在不使用的继承的方式下,采用装饰设计模式可以扩展一个对象的功能,可以使一个对象变得越来越强大。我们首先看下效果图我们都知道listview是可以添加头部和尾部的,我们大概看下,具体的可以自己去看下,源码并不难。public void setAdapte...原创 2018-08-04 16:00:38 · 793 阅读 · 0 评论 -
线程池介绍
1.线程执行的时间: T=T1(线程创建的时间)+T2(run方法执行的时间)+T3(线程销毁的时间)2.线程池执行解决的问题: 解决线程反复的创建和销毁,做到线程可以复用3.线程测试public class ThreadPoolTest { static ThreadPoolExecutor threadPoolExecutor; private static f...原创 2018-03-21 23:26:05 · 195 阅读 · 0 评论 -
第三方开源库OKHttp-整体架构和源码分析
1. HTTP状态码:1xx: Infomational (信息状态码) ,接收的请求正在处理 2xx: Succeed(成功),请求正常处理完毕,如 200 3xx: Redirection(重定向),需要进行附加操作,一般是没有响应数据返回的,如 304(Not,modified)307 (重定向) 4xx: Client Error (客户端的错误),服务器无法处理请求,如 ...原创 2018-03-31 13:20:52 · 697 阅读 · 0 评论 -
面向对象六大基本原则——网络引擎切换
一、六大原则1.1 单一职责原则: 英文:Single Responsibility Principle定义:就一个类而言,应该仅有一个引起它变化的原因。简单来说,一个类中应该是一组相关性很高的函数、数据的封装。请求和缓存完全写到了一堆小插曲:链式调用,调用方式有问题 ,比如 超时重连,超时时间 ,支持cookie 等等,更多的是关注业务逻辑问题? xUtils Okht...原创 2018-03-04 12:10:21 · 360 阅读 · 0 评论 -
策略设计模式
模式定义 策略模式定义了一系列算法,并将每一个算法封装起来,而且是他们之间可以相互切换。不同理财工具理财率不一样,一般写法public class FinaceManager { public enum Finace{ ZHI_FU_BAO,PEAKMAIN } private float zhifubaoFinace(int month,in...原创 2018-03-22 13:42:00 · 214 阅读 · 0 评论 -
adapter设计模式
适配器模式就是将某一些对象转成我们需要的适配的对象。分为两种一种是类适配器,还有一种是对象适配器举个例子:以前公司只支持人民币付钱,后来走向国际化支持美元一般写法public class RMBAdapter { private float mRmb; public RMBAdapter(float rmb) { this.mRmb = rmb;...原创 2018-03-22 16:15:34 · 415 阅读 · 0 评论 -
编译时注解 - ButterKnife手源码分析和手写
参考butterknife源码进行手写,首先分model:butterknife,compiler和annomation首先butterknife源码分析:使用butterknife之后会自动生成这个类package com.peakmain.butterkinfe;public class MainActivity_ViewBinding implements Unbin...原创 2018-03-18 22:53:26 · 542 阅读 · 0 评论 -
注解绕过微信支付和分享的局限
首先看下系统演变 版本1版本2版本3 分析版本3,新增一个功能支付,但是不能再APP中添加功能和代码,这时候我们可以这样,我们单独做一个支付功能,然后APP去调用支付的主Activity即可,但是需要在APP的mainifest中声明activity我们将分为三个module:compiler和annotation,pay首先compiler中添加注解:包括包名和类...原创 2018-03-18 23:15:53 · 2040 阅读 · 0 评论 -
Handler源码分析
测试代码 new Thread(new Runnable() { @Override public void run() { /* Message message1 = Message.obtain(); message1.obj = "Handler源码分析"; ...原创 2018-03-19 14:45:35 · 165 阅读 · 0 评论 -
单例设计模式补充-volatile 关键字
之前写过单例模式23种设计模式之单例模式volatile关键字防止重排序 如图:多线程的时候,可能会导致开辟内存之后直接将给变量复制了,导致重排序线程可见性 - 某一个线程改了公用对象(变量),短时间内另一个线程可能是不可见的,因为每一个线程都有自己的缓存区(线程工作区) 如案例 public static void main(String[] args) {...原创 2018-03-20 08:19:26 · 382 阅读 · 0 评论 -
单例模式之强大的activity的管理
public class ActivityManager { //增加删除操作多,栈是先进后出 public Stack<Activity> mActivities; private ActivityManager() { mActivities = new Stack<>(); } //双重校验锁 pri...原创 2018-03-20 09:57:38 · 1541 阅读 · 0 评论 -
享元和命令组合设计模式
1.享元设计模式:定义:使共享对象可有效的支持大量的细粒度的对象,核心其实就是对象复用 使用:Message,LayoutInflater,EventBus (PendingPost)火车票public class Ticket { String from; String to; public Ticket(String from, String to) {...原创 2018-03-30 09:52:39 · 206 阅读 · 0 评论 -
builder设计模式之NavigationBar
INavigation接口public interface INavigation { /** * 设置布局 */ void createNavigationBar(); /** * 添加到头部 */ void attachParent(View navigationBar, ViewGroup parent);...原创 2018-03-21 00:02:44 · 280 阅读 · 0 评论 -
EventBus源码分析
使用MainActiviitypublic class MainActivity extends AppCompatActivity { private TextView mTv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(sav...原创 2018-03-30 19:30:06 · 186 阅读 · 0 评论 -
EventBus的手写
在上一篇文章我讲了EventBus源码,现在我们来手写一下EventBus使用MainActiviitypublic class MainActivity extends AppCompatActivity { private TextView mTv; @Override protected void onCreate(Bundle savedIn...原创 2018-03-30 20:34:13 · 391 阅读 · 0 评论 -
工厂设计模式之数据存储
第一个版本简单使用onCreate方法 mTextView = (TextView) findViewById(R.id.test_tv); // 用户的登录信息或者其他信息保存 sp 数据库 等等 SharedPreferences preferences = getSharedPreferences("cache", MODE_PRIVATE);...原创 2018-03-21 13:53:57 · 384 阅读 · 0 评论 -
Java网络编程基础
1.TCP/IP协议家族 OSI七层协议:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层 TCP三次握手(建立连接)和四次挥手(断开连接)2.Http请求:他们之间通信是以报文的形式 客户端请求(Request):请求报文 = 请求头 + 空行 + 请求数据 Accept: 客户端可以处理的数据格式 Cookie:服务端的之前给我们的Cookie服务端响应(Respo...原创 2018-03-31 00:11:50 · 350 阅读 · 0 评论 -
手写retrofit
RetrofitClient:用于activity直接交互public class RetrofitClient { private final static ServiceApi mServiceApi; static { OkHttpClient okHttpClient = new OkHttpClient .Buil...原创 2018-04-07 23:09:12 · 706 阅读 · 0 评论 -
rxjava+retrofit+okhttp三者封装
基于这篇文章进行封装https://blog.csdn.net/qq_24675479/article/details/79831828添加依赖 compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:converter-gson:+' compile 'com.sq...原创 2018-04-07 23:24:23 · 591 阅读 · 0 评论 -
android进阶-系统架构篇
系统架构博客和简书我的博客:https://blog.csdn.net/qq_24675479 我的简书:https://www.jianshu.com/u/3ff32f5aea98软件架构01.面向对象六大基本原则 - 网络引擎切换 https://blog.csdn.net/qq_24675479/article/details/7943562002.AOP面向...原创 2018-08-31 11:28:16 · 452 阅读 · 0 评论