![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 65
魏华达
这个作者很懒,什么都没留下…
展开
-
模板方法模式
定义定义一个操作中的算法框架,而将一些步骤延迟到子类中吗,让子类可以不改变算法的结构的既可以重定义该算法的特定步骤使用场景1.一个子类有共有的方法,并且逻辑基本相同2.重要,复杂的算法可以把核心算法设计为一个模板方法,周边的相关细节功能由各个子类去实现3.重构的时候,模板方法模式是一个经常使用的模式,吧相同的代码抽取到父类中,然后通过钩子函数约束行为UML图AbsTemplate定义了一个算法框架ConcreteImplA 具体实现类AConcreteImplB 具体实现类B代码实现原创 2021-02-21 17:12:16 · 105 阅读 · 0 评论 -
备忘录模式
定义在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后可以将对象恢复到原先保存的状态。使用场景需要保存一个对象在某个时刻的某种状态或部分状态。如果用一个接口来让其他对象得到这些状态,将会暴露对象的实现细节,并破坏对象的封装性,一个对象不希望外界直接访问内部状态,通过中间对象可以间接访问其内部状态。UML图如下Originator负责创建一个备忘录,可以记录,恢复自身内部状态,同时可以根据需要决定存储自身的哪些内部状态Memoto 备忘录角色,用于存储Origi原创 2021-02-18 22:46:06 · 108 阅读 · 0 评论 -
观察者模式
定义定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,所有依赖与他的状态都会被通知到。使用场景关联行为场景,需要注意的是关联行为是可以拆分的事件多级触发,跨系统的消息交换场景观察者模式的UML类图Subject 抽象的主题,也就是被观察者的角色,抽象主题角色把所有观察者对象的引用存在一个集合中,每个主题都可以有任意数量的观察者,抽象主题提供接口,可以增加删除观察者对象。ConcreteSubject 具体,该角色将有关状态存在具体观察者对象,具体内部发生变化的时候,给所有注册过的通知原创 2021-02-14 22:37:17 · 107 阅读 · 0 评论 -
LeakCanary 详解
1.背景LeakCanary 是一种方便的内存泄露检查工具,与相对于用dump 内存 然后用MAT工具去分析,要简单便捷很多,我们需要了解如何使用这个工具及其背后的原理2.基本使用2.1加入远程引用 debugCompile 'com.squareup.leakcanary:leakcanary-android:1.6.1' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.1'2.2Le原创 2021-01-19 19:57:07 · 8322 阅读 · 1 评论 -
Builder模式
1 定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示;2 举个例子我们通过一个例子来引出Builder模式。假设有一个Person类,我们通过该Person类来构建一大批人,这个Person类里有很多属性,最常见的比如name,age,weight,height等等,并且我们允许这些值不被设置,也就是允许为null,该类的定义如下。public class Person { private String name; private int age;原创 2021-01-18 13:31:15 · 171 阅读 · 0 评论 -
单例模式详解
1.前言单例模式应该是用得最多的设计模式之一,如果你的应用有个类很消耗资源 那么我们没有理由让他们不断创建2. 定义确保一个类只有一个实例,而且自行实例化,并向系统提供这个实例。3.适合场景确保一个类只有一个对象的地方,避免产生多个对象消耗过多的资源,或者说创建一个对象需要耗费大量的资源 也需要用单例模式。4.实现的关键点4.1构造方法不对外开发 一般是private4.2通过一个静态方法或者枚举返回单例对象4.3确保单例对象有且只有一个,尤其在多线程的环境下5.多种单例的写法和优缺点原创 2021-01-04 22:07:52 · 228 阅读 · 2 评论 -
APK打包过程
apk打包过程aapt阶段使用aapt来打包res资源文件,生成R.java、resources.arsc和res文件(二进制 & 非二进制如res/raw和pic保持原样)resources.arsc文件resources.arsc这个文件记录了所有的应用程序资源目录的信息,包括每一个资源名称、类型、值、ID以及所配置的维度信息。我们可以将这个resources.arsc文件想象成是一个资源索引表,这个资源索引表在给定资源ID和设备配置信息的情况下,能够在应用程序的资源目录中快速地找到原创 2020-10-21 09:00:15 · 270 阅读 · 0 评论 -
Activity启动逻辑及Hook技术的应用
背景为什么我们要学习Activity的启动逻辑及hook技术?随着插件化的流行,我们需要学会在没有注册 AndroidManifest的时候开启一个目标应用,这个就需要用到hook技术,而要理解hook技术,就必须掌握Activity的在fragmework的启动流程,同时在关键的地方准确的hook住才能实现一、Activity的启动过程(Android 8.0为例子) startActivity(new Intent(this, PageActivity.class));我们以最原创 2020-10-14 23:17:27 · 429 阅读 · 0 评论 -
AIDL原理全解析
背景目前Android的跨进程通讯主要就是采用Binder机制进行IPC通讯的,在实际的开发中,在跨进程的访问中我们也优先选用AIDL进行通讯,因为它相比传统IPC基于C/S 架构易用性高,只需要拷贝一次,所以我们有必要对AIDL进行详细的了解。1、简单使用 举个栗子比如我们要通过跨进程实现一个录屏功能,我们不需要知道另外一个服务是怎么实现录屏的功能的,我们只需要定义三个接口,就可以实现调用另外一个服务的方法,也就是跟另外一个服务通讯,命令它去开始录屏或者停止录屏,录屏完保存在一个路径中,这样客户端只原创 2020-10-04 13:02:44 · 1926 阅读 · 0 评论 -
Rxjava && RxAndroid的基础使用
1.背景Rxjava是微软公司为了解决实际遇到的流问题而发明出来的,它又很多优点比如jar包非常小 只有大概一m是一个轻量级的框架支持java 8 lamba表达式从Android2.3开始支持支持同步和异步RxAndroid是Rxjava 提供给Android的一个扩展库,它主要是提供了一个调度器Schedulers,可以解决子线程和主线程切换的问题。2.观察者模式需要知道...原创 2020-04-12 20:53:27 · 879 阅读 · 1 评论 -
AIDL跨进程通讯
背景AIDL跨进程通信,又叫做Android 接口定义语言,能让两个Android进程进行通讯的语言一、服务端创建一个aidl文件package com.example.server;interface IPlayServiceAIDL { void play(); void stop();}包名必须是服务端的包名,文件夹的目录如图所示,写好aidl文件后m...原创 2020-02-09 22:24:41 · 218 阅读 · 0 评论 -
Android 系统结构
Android系统架构Android系统结构分为5层,从上到下依次是应用层,应用架构层,系统运行层,硬件抽象层和Linux内核1.应用层系统的内置应用程序以及非系统的应用程序都属于应用层,负责与用户的交互 通常由java开发2.应用架构层应用架构层为开发人员提供开发应用需要的api,我们平时开发的应用程序都是调用这一层的API 也叫FrameWork3.系统运行库系统运行库分为两部分...原创 2020-01-25 21:53:07 · 228 阅读 · 0 评论 -
Android网络请求相关
1.网络基本知识1.1 网络分层1.1.1物理层负责比特流在节点之间的传输1.1.2 数据链路层 吧不可靠的物理线路上进行数据的可靠传递1.1.3 网络层决定如何将数据从发送方到接收方1.1.4 传输层进行端到端的通信 这上面有Tcp和Udp协议1.1.5应用层 主要协议是HTTP 和FTP 等协议1.2 三次握手与四次挥手1.2.1 三次握手第一次握手:建立连接 客户发送请求报...原创 2019-02-06 21:19:16 · 415 阅读 · 0 评论 -
结构型设计模式
1.代理模式定义:为其他对象提供一种代理以控制对这个对象的访问1.1简单实现静态代理定义个购买的接口public interface IShop { void buy();}我这个人 需要购买public class LiuWangShu implements IShop { @Override public void buy() { Sy...原创 2019-02-23 14:44:43 · 131 阅读 · 0 评论 -
Retrofit 源码解析
1.背景Retrofit 是一个基于okHttp为基础的网络请求框架,底层用到了okHttp来进行网络请求,并且结合RXJava能做到非常强大的切换控制作用是现在主流的Android开发框架,并且Retrofit在设计之中用到了大量的设计模式,其实非常适合我们去学习。2.基础使用我们可以看到它的基本使用 其实就是用建造者模式建造了一个Retrofit对象 然后创建了一个call对象 ,调用c...原创 2019-02-11 00:07:14 · 273 阅读 · 0 评论 -
创建型设计模式
1单例模式定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点1.1单例模式的写法1.1.1饿汉模式public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { } public static Singleton g...原创 2019-02-21 21:44:13 · 957 阅读 · 0 评论 -
OkHttp源码分析
1.背景okHttp作为Android开发最火的开源网络请求框架在Android网络请求中有重要位置2.OkHttp的基本使用File externalCacheDir = context.getExternalCacheDir(); int cacheSize = 10 * 1024 * 1024; OkHttpClient.Builder builder ...原创 2019-02-09 18:59:58 · 197 阅读 · 0 评论 -
六大设计原则
1.单一责任原则定义:对一个类而言,应该只有一个引起它改变的原因通俗地讲就是不要让一个类承担太多的职责,比如 一个Activity不要放bean类,不要把适配器也放进来,Activity就是一个展示的页面和功能。2.开放封闭原则定义:类,模块,函数等应该是可以扩展的,但是不可修改就是我们再设计时候应该尽量通过扩展的方式来实现,而不是改变代码逻辑,比如静态工厂和动态工厂,动态工厂就是开放封...原创 2019-02-21 13:25:47 · 104 阅读 · 0 评论 -
行为型设计模式
1.策略模式1.1定义 :定义一系列算法,把每个算法封装起来,使得他们可以互相替代1.2代码实现定义一个共同接口public interface FightingStrategy { public void fighting();}对不同的场景实现接口实现不同的方法public class CommonRivalStrategy implements FightingS...原创 2019-02-24 15:07:52 · 161 阅读 · 0 评论 -
EventBus源码解析
1.背景EventBus作为一款事件发布的第三方开源框架,几乎是每个项目都会使用到,使用它可以对Fragment和Fragment之间 Activity和Activity之间,不同组件之间信息交互变得便捷,减少耦合性上有非常显著的效果,为了搞清楚EventBus 这个Android开发中国民级的开源组件源码,我们来看一下源码是怎么写的2.基础使用加入引用 implementation...原创 2019-02-20 00:13:18 · 182 阅读 · 0 评论 -
Dagger2源码解析
1、背景Dagger2是一个依赖注入框架能让项目进行解耦合,现在Dagger2在项目中被广泛使用特别是结合MVP架构使用,非常典型的降低耦合,因为在MVP模式只能中Activity持有presenter的引用,同时presenter又持有view的引用,这样便于更新UI界面,这样Activity和Presenter就耦合在一起了,而dagger注入可以有效解耦合2、基础使用1.添加依赖 ...原创 2019-03-16 14:09:23 · 470 阅读 · 0 评论 -
MVC、MVP、MVVM彻底理解
背景随着Android的成熟Android的应用架构越来越多受到重视,因为程序的维护和扩展远远比开发成本要高很多,选用良好的的设计架构能很好地维护和扩展程序1.MVC 模式(1)Model 我们针对业务模型,建立数据结构和相关的类(2)View 一般可以表达为xml文件的布局(3)Controller 在Activity的逻辑处理可以认为是控制层优缺点MVC 模式的一个优点就是使用简...原创 2019-03-12 22:31:50 · 205 阅读 · 0 评论 -
LeakCanray源码分析
一、背景LeakCanray 是由square开源的一款轻量的第三方开源内存检测工具,让我们可以方便复查排查问题的所在。二、Java内存分析2.1 栈内存:存放我们的基本类型2.2 堆内存:存放我们new 出来的对象由java虚拟机来管理2.3 方法区:存放方法和静态变量2.4 内存泄露的原因,一个长生命周期对象持有另外一个对象的引用导致对象的无法回收所以泄露,会导致OOM的主要原因之...原创 2019-10-05 13:23:56 · 273 阅读 · 0 评论 -
事件总线:EventBus
一、为何使用事件总线在Android开发中,经常会涉及到Activity、Fragment、Service等不同组件之间或者模块之间的通讯和信息传递,,使用传统的方式,耦合度会很严重,整个代码框架会变得很混乱吗,一个模块的变化可能会引起连锁反应二 原理事件总线是基于观察者模式的思想实现的,它使用发布订阅的方式支持组件和模块之间的通讯事件Event ,只包含数据,不对数据进行操作,订阅者 Subscr原创 2017-07-12 20:43:53 · 726 阅读 · 0 评论 -
Java多线程
1.线程和进程的区别进程作为拥有资源的基本单位线程作为调度和分配的基本单位,使用线程能提高cpu的利用率2.线程的状态(1)新创建状态(2)可运行状态(3)阻塞状态 (4)等待状态(5)终止状态3.线程使用方式(1)一个类继承Thread 重写run方法 调用这个类的start()方法(2)一个类接上runnable接口 实现run方法 调用start()方法(一般使用)(3)实现...原创 2019-02-03 19:15:46 · 229 阅读 · 0 评论 -
View体系学习
1.View与ViewGroupView是Android所有控件的基类 ViewGroup继承View是所有组合控件的基类2.View坐标系简单来说 view的getRawX 和getRawY方法是指拿到屏幕左上角的距离View的距离,getTop getLeft getBottom getRight 是指 view相对父控件距离,getX 和getY也是距离父控件距离3.view 的滑动...原创 2019-01-24 22:01:26 · 237 阅读 · 0 评论 -
Android 5.0 6.0 7.0 8.0 9.0新特性
Android在5.0:最主要的一个特性就是加入了RecycleView这个组件,可以替代ListView和GridView ,其他的功能就是支持多种设备,全新的通知中心,多任务窗口有了卡片式设计,Android6.0:新特性 主要有权限管理,支付相关,指纹支持,电池优化等 其他的跟开发没什么关系,这里面最主要的就是一个权限管理,权限管理分为动态权限和运行时权限,动态权限需要动态授权,具体代码就...原创 2019-01-12 11:50:27 · 402 阅读 · 0 评论 -
ANR产生的原因及其定位分析
前言ANR是Android 中独有的概念,全称Application No Responding 如何定位和和避免出现这个问题是Android程序员的必备修养一 、ANR产生的原因1.1 ANR 产生的原因只有当应用程序的UI线程响应超时才会引起ANR 超时产生的原因有两种,1 当前事件没有机会处理,例如UI线程正在响应另外的事件,当前事件被某个事件给阻塞掉了 2 当前事件正在处理 但是由于耗时太原创 2017-07-09 23:59:26 · 4846 阅读 · 0 评论 -
Android性能优化
前言作为一个合格的工程师,不断追求代码和软件的极值是我们Android工程师的,因为手机设备资源有限,相对其他软件更是需要不断的优化,来提高我们的软件的竞争力。一、图片优化图片的加载和显示是每个商业的App都无法避免的问题,对于图片重度依赖类App ,例如壁纸应用,图片社交应用,对于图片处理将影响到整个APP用户的体验在了解如何优化图片相关内容之前,我们先要了解Android支持的格式1.1、 An原创 2017-07-17 20:26:43 · 271 阅读 · 0 评论 -
Android_动画机制
Android动画是在开发时候必备的需求,随着设计师动画效果日趋复杂,作为一位合格的Android工程师掌握动画是必备的技能一 逐帧动画逐帧动画是利用人眼视觉停留的效果,在不断的变化,感觉出动画的效果,设计师给出一系列可以变化的图片,开发者指定每一帧图片播放的时间,然后开始动画步骤1将所有图片放到drawable下 命名最好有顺序步骤2 在drawble下创建一个文件 名字可以为animation1原创 2017-07-07 16:20:40 · 329 阅读 · 0 评论 -
Android 触摸事件传递机制
Android 触摸事件传递机制前言:我们在开发中经常遇到多个view和viewGroup嵌套的问题,为了快速解决这类问题,开发者需要对view事件有一个交深的理解1.1触摸类型action_down 手指按下事件action_move 手指滑动事件action_up 手指抬起事件一般手指抬起和按下事件是一定能监听到 move事件就不一定能监听到位1.2事件原创 2017-07-06 20:23:08 · 325 阅读 · 0 评论 -
推送实现机制
前言Android 平台的推送是一项基本的能力,作为一个合格的开发者,我们应该学会去推送信息。一、推送的类型1.1、传统的移动端是通过主动向服务器提出请求,这种为Pull模式,这种之间维系的是一种短连接,需要移动端主动请求建立连接,拿到数据后断开连接,下次连接的时候再请求。1.2现在的推送模式是服务端主动给客户端发送消息,这种称为Push模式,也就是现在所用的推送模式。这种模式要求服务器和客户端建立原创 2017-07-14 20:23:34 · 456 阅读 · 0 评论 -
Android_设置软盘监听事件
Android软盘一般是伴随着EditText来显示和隐藏,那么对软盘的一些按钮的监听也需要借助于EditText。软键盘的Enter键默认显示的是“完成”文本,通过设置android:imeOptions来改变默认的“完成”文本。这里举几个常用的常量值:actionUnspecified 未指定,对应常量EditorInfo.IME_ACTION_UNSPECIFIED.原创 2017-07-03 21:14:37 · 902 阅读 · 0 评论 -
Android数据处理技术
前言作为移动设备,数据的序列化,反序列化,存储,加密,有着举足轻重的作用,数据如何保存和解析等,都存在很多知识点,作为一个靠谱的Android工程师,对数据处理的要求不可小瞧一、序列化1.1 SerializableSerializable技术是java语言的特性, 他说最简单也是应用最广的序列化方案之一,只有实现了Serializable接口的java对象才可以实现序列化,这种序列化是将java对原创 2017-07-10 16:39:49 · 523 阅读 · 0 评论 -
Android_高德地图实现定位模板代码
高德地图定位实例代码package gaode.gaode;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.util.Log;import andro原创 2017-06-29 21:53:48 · 884 阅读 · 0 评论 -
Android_List局部刷新某一个item
需求以点赞为例子只刷新点赞的数量并将点赞的哪一个设置为黑色,因为直接用adapter的notifyDataSetChanged 会全部刷新需要浪费时间 而且图片重新加载会导致闪烁,造成不好的用户体验感核心代码public void updateItem(ListView listView, BBS bbs) { if (listView != null) {原创 2017-06-29 21:47:53 · 1324 阅读 · 0 评论 -
Picasso实现原理
一、背景Picasso作为一个非常棒的Android 第三方图片加载库,在Github上获得了很高的声誉 我们有必要进行探究二实现原理Picasso.with(context).load(“image url”).into(imageView);这么简单的一行代码就完成了Android中加载图片的功能adapter中ImageView的回收和取消下载,使用最小的内存来完成图片的过渡,自动的内存和磁盘原创 2017-11-09 21:55:53 · 525 阅读 · 0 评论 -
Volley原理解析
一、背景Volley是Google 13年推出的Android网络请求框架,那么重要的框架我们当然要好好学习一波二、特点Volley的主要特点特别适合数据量小,通讯请求频繁的网络请求操作,因为底层是用请求队列的形式进行三、总体设计上面是VOlley的总设计图,主要是通过Diapath Thread不断从RequstQueue中取出请求根据是否已经调用Cache或NetWork这两类数据取接口之一,从原创 2017-11-12 22:09:25 · 257 阅读 · 0 评论 -
RXJava最全学习教程
一、背景这篇文章的目的有两个: 1. 给对 RxJava 感兴趣的人一些入门的指引 2. 给正在使用 RxJava 但仍然心存疑惑的人一些更深入的解析二、为什么学RxJavaRxJava 在 GitHub 主页上的自我介绍是 “a library for composing asynchronous and event-based programs using observab...原创 2018-08-12 16:14:22 · 1606 阅读 · 2 评论 -
Dagger2实现原理
一、背景现在Dagger2在项目中被广泛使用特别是结合MVP架构使用,非常典型的降低耦合,因为在MVP模式只能中Activity持有presenter的引用,同时presenter又持有view的引用,这样便于更新UI界面,这样Activity和Presenter就耦合在一起了,而dagger注入可以有效解耦合,所以在MVP中使用是再好不过了添加依赖apply plugin: 'c...原创 2018-07-22 01:08:44 · 1390 阅读 · 0 评论