自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

野生程序员

一步一步往上爬

  • 博客(69)
  • 资源 (2)
  • 收藏
  • 关注

原创 Android-ANR总结原理分析

1、概述 ANR即Application Not Responding(应用程序无响应),一般在ANR的时候会弹出一个应用无响应对话框,同时会候产生一个日志文件trace.txt,位于/data/anr/文件夹下面,trace文件是Android Davik虚拟机在收到异常终止信号时产生的,最常见的一个触发条件就是Android应用中产生了FC(force close)。由于该文件的产生是在DV...

2018-08-19 19:28:41 9524 1

原创 彻底理解Android中的ThreadLocal

三、源码分析 1、构造方法public ThreadLocal() {}2、set方法public void set(T value) { //获取当前线程 Thread currentThread = Thread.currentThread(); //获取当前线程的Values对象 Values values = values(curren...

2018-07-09 10:05:50 2006

原创 一篇文章彻底理解SharedPreferences

一、概述SharedPreferences简称Sp(后面都会称Sp),是一种轻量级的数据存储方式,采用Key/value的方式 进行映射,最终会在手机的/data/data/package_name/shared_prefs/目录下以xml的格式存在。 Sp通常用于记录一些参数配置、行为标记等!因为其使用简单,所以大多数开发者用起来很爽!但是 请注意:千万不要使用Sp去存储量大的数据,也...

2018-07-01 21:01:14 21350 1

原创 设计模式—桥接模式

重点内容 定义将抽象部分与实现部分分离,使它们都可以独立地进行变化使用场景如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系,可以通过桥接模式使他们在抽象层建立一个关联关系对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,也可以考虑使用桥接模式。一个类存在两个独立变化的维度,且这两个 维度都需要进行扩展。关键点一个抽象部分

2018-02-04 23:25:39 307

原创 设计模式—外观模式

定义要求一个子系统的外部与其内部的通信必须通过一个统一的接口对象进行。该模式提供一个高层次的接口,使得子系统更容易使用。使用场景为一个复杂子系统提供一个统一的简单接口。子系统往往因为不断演化而变得越来越复杂,甚至可能被替换。大多数模式使用时都会产生更多更小的类,这使子系统更具可重用性的同时也更容易对子系统进行定制、修改,这种易变形使得隐藏子系统的具体实现就变得尤为重要,外观模式可以提供一个简单统一的

2018-02-04 22:39:29 295

原创 设计模式—享元模式

简介享元模式时对象池的一种实现,用来尽可能减少内存的使用量,适合用于可能存在大量重复对象的场景,来缓存可共享的对象,达到对象共享、避免创建过多对象的效果,这样就可以有效的提升性能、避免内存移除等。享元对象中的部分状态是可以共享的,可以共享的状态称之为内部状态,内部状态不会随着环境变化,不可共享的状态称之为外部状态,他们会随着环境的改变而改变,。在享元模式中会建立一个容器为map,它的键是享元对象的内

2018-02-01 23:22:56 220

原创 设计模式—装饰模式

定义动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式生成子类更灵活。使用场景需要透明且动态的扩展类的功能时关键点一个抽象组件角色—接口或抽象类,被装饰的原始对象一个或多个具体组件—抽象组件的具体实现,被装饰的具体对象一个抽象装饰角色—抽象类,装饰组件对像,持有组件对象引用一个或多个具体装饰类—对抽象装饰者的具体实现实现/** * 抽象组件 */public abstract cla

2018-01-31 22:31:35 205

原创 设计模式—适配器模式

定义适配器模式把一个类的接口转换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法一起工作的的两个类能够在一起工作使用场景系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作需要一个统一的输出接口,而输入端的类型不可预知关键点一个目标角色—所期待得到的接口一个需要被转换的角色—需

2018-01-31 21:54:39 213

原创 设计模式—组合模式

简介组合模式也成为部分整体模式,它将一组相似的对象看作一个对象来处理,并根据一个树状结构来组合对象,然后提供统一的方法去访问相应的对象定义将对象表示成树形结构以表示“部分—整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。使用场景表示对象的部分、整体层次结构时从一个整体中能够独立出部分模块或功能的场景关键点一个抽象根节点—声明组合对象的接口,在适当情况下实现所有类共有接口的缺省行为一个

2018-01-30 19:44:31 177

原创 设计模式—代理模式

定义为其他对象提供一种代理以控制对这个对象的访问使用场景当无法或不想直接访问某个对象或者访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口关键点一个抽象角色—声明具体对象和代理对象共同的接口方法为抽象类或者接口,被访问对象和代理对象均实现该方法一个具体对象角色—被委托对象或被代理对象,执行具体的业务逻辑方法

2018-01-30 19:10:37 195

原创 设计模式—中介者模式

定义中介者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而可以使他们可以松散耦合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。从而保证这些作用可以彼此独立变化。中介者模式将多对多的相互作用转化为一对多的相互作用。中介者模式将对象的行为和协作抽象化,把对象在小尺度的行为上与其他对象的相互作用分开处理。使用场景当对象之间的交互操作很多且每个对象的行为操作都

2018-01-24 23:26:21 153

原创 设计模式—访问者模式

简介访问者模式是一种将数据操作与数据结构分离的设计模式,基本思想是软件系统中拥有一个由许多对象构成的、比较稳定的对象结构,这些对象都拥有一个accept方法用来接受访问者对象的访问。访问者是一个接口,拥有一个visit方法,这个方法对访问到的对象结构中不同类型的元素做出不同的处理。定义封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义这些元素的新的操作。使用场景对象结

2018-01-23 23:18:53 192

原创 android架构设计—mvp模式封装

简介关于Android程序的构架, 当前比较成熟且使用最多的应该就是MVP架构了,当然还有其他的如:MVC和MVVM。MVC相对于较为落后,、耦合度太高、职责不明确,MVVM使用DataBind,普及性不如MVP,况且Google官方提供了Sample代码来展示MVP模式的用法。因此选择MVP架构毫无疑问。概念MVP即Model、View、PresenterView:负责视图部分展示、视图事件处理。

2018-01-21 14:10:52 10711 5

原创 设计模式—模板方法模式

定义定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤,通俗来讲就是流程固定,具体实现不同使用场景多个子类有公有的方法,并且逻辑基本相同重要、重复的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由各个子类实现重构时,模板方法模式是一个经常使用的模式,把共同的代码抽取到父类中,然后通过钩子函数约束其行为关键点一个抽象类,定义

2018-01-18 22:40:39 221

原创 设计模式—迭代器模式

简介 作为开发者,势必会涉及到容器的操作,比如Java中的List、Map等,对容器的访问必然会涉及到遍历算法,如果将对容器的遍历封装在容器内部,对容器而言就承担了过多的功能,容器类不仅要维护自身内部的数据元素而且还要对外提供遍历的接口方法,因为遍历状态的存储问题不能对同一个容器同时进行多个遍历操作,如果开发者不提供遍历算法让使用者自己去实现,又会对容器的内部细节暴露,正因如此,迭代器模式应运而生。

2018-01-18 22:02:07 187

原创 设计模式—备忘录模式

简介备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态。备忘录模式实现的方式需要保证被保存的对象状态不能被对象从外部访问,目的是为了保护好被保存的这些对象状态的完整性以及内部实现不向外暴露。定义在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可将该对象恢复到原先的状态。关键点一个原始数据对象,负责创建一个备忘录,可以记录、恢复自

2018-01-16 23:10:20 253

原创 设计模式—观察者模式

定义定义对象间一种一对多的依赖关系,使得每当一个对象状态改变时,所有依赖于它的对象都会得到通知并被自动跟新使用场景关联行为场景,需要注意的是关联行为是可拆分的,而不是组合关系事件多级触发场景跨系统的消息交换场景,如消息队列、事件总线的处理机制关键点一个抽象被观察者(Observable)—抽象主题把所有观察者对象的引用保存在一个集合里,每个主题都有任意数量的观察者,抽象主题提供一个接口,可以增加和删

2018-01-15 23:09:05 143

原创 设计模式—命令模式

简介命令模式其实就是将一系列的方法调用进行封装,用户只需要调用一个方法执行,那么所有这些被封装的方法将会被依次调用。定义将一个请求封装成一个对象,从而让用户使用不同的请求将客户端参数化,对请求队列或者记录请求日志,以及支持可撤销的操作使用场景需要抽象出待执行的动作,然后以参数的形式提供出来在不同时刻指定、排列和执行请求。一个命令对象可以有与初始请求无关的生存期需要支持取消操作支持修改日志功能,这样当

2018-01-15 21:43:19 163

原创 设计模式—责任链模式

定义使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条连传递该请求,直到有对象处理它为止。使用场景多个对象可以处理同一请求,单具体由哪个对象处理则在运行时决定在请求处理这不明确的情况下向多个对象提交一个请求需要动态指定一组对象处理请求关键点一个抽象类,定义处理请求的方法,并持有下一节点对象的引用,对请求进行分发多个具体的请求处理类,对请求进行具

2018-01-14 18:54:30 177

原创 设计模式—状态模式

简介状态模式中的行为由状态决定,不同的状态下有不同的行为。状态模式和策略模式的结构相同,但本质和目的却完全不一样。状态模式的行为是平行、不可替换的,策略模式的行为时彼此独立、可相互替换的。概括起来就是状态模式把对象的行为包装在不同的状态对象里,每一个状态对象都有一个共同的抽象状态基类。定义当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其行为使用场景一个对象的行为取决于它的状态,并

2018-01-11 23:43:04 204 1

原创 设计模式—策略模式

定义策略模式定义了一系列算法,并将每一个算法封装起来,而且使他们可以相互替换。策略模式让算法独立于使用它的客户而独立变化。通俗的讲就是通过动态注入不同的对象或实现来动态替换某种具体行为。使用场景1.针对同一类型问题的多种处理方式,仅仅是具体行为有差别 2.需要安全的封装多种同一类型的操作 3.出现同一抽象类有多个子类,而又需要使用条件语句来选择 具体子类时关键点一个抽象的策略或算法一个或多个具体

2018-01-10 23:32:49 239

原创 抽象工厂方法模式

定义为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定他们的具体类使用场景一个对象族有相同的约束时可以使用抽象工厂模式。例如生产一部车需要很多部件:轮胎、发动机、制动系统等,不同的型号会有不同的部件,而这些部件之间又是相互依赖的。这时候就可以考虑使用抽象工厂模式。关键点抽象工厂—声明一组用于创建一个产品的方法,每个方法对应生产一种产品或者称之为组件具体工厂—抽象工厂的实现类,实现了在 抽象

2018-01-01 14:57:19 210

原创 设计模式—工厂方法模式

定义定义一个用于创建对象的接口,让子类决定实例化哪个类使用场景在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复合对象适合使用工厂模式,用new就可以完成创建的对象无需使用工厂模式。关键点一个抽象工厂—定义创建对象的接口抽象工厂的实现类—可以是一个实现或多个实现,用于生产需要的具体对象一个抽象产品—工厂方法模式所创建的产品的父类抽象产品的实现类—需要被创建的具体产品实现/** * 抽象工厂类

2018-01-01 00:46:49 305

原创 设计模式—原型模式

简介原型模式是创建型模式,原型二字表明了该模式应该有一个样板实例,用户从这个样板实例中复制出一个内部属性一致的对象,被复制的实例称之为原型。原型模式多用于创建复杂的或者构造耗时的实例,在这种情况下,复制一个以存在的实例可以使程序运行的更加高效。定义用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象使用场景1.类初始化需要非常多的资源,这个资源一般包括数据、硬件资源等,通过原型复制避免这些消

2017-12-30 17:49:25 157

原创 设计模式—build模式

简介Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来,两者之间的耦合度也降到最低。定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。使用场景1.相同的方法,不同的执行顺序,产生不同的事件结果。(View的封装,对

2017-12-29 07:56:55 15794 2

原创 设计模式—单例模式

1.定义确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。2.使用场景例如:在一个应用中,应该只有一个ImageLoader实例,这个ImageLoader中既包含线程池、缓存系统、网路请求等,创建这个实例非常消耗系统资源,因此没有理由让它多次构建。这种不能自由构造对象的情况就是单例模式的使用场景。其他的例如:IO操作、数据库操作等。3.关键点1)将构造函数私有化(privat关键字)

2017-12-28 00:10:45 247

原创 程序设计六大原则

1.单一职责简单来说单一职责就是一个类只负责一个功能。更加具体的说就是对一个类而言,应该是一组相关性很高的函数、数据的封装,是高内聚低耦合的,对外界而言应该仅有一个引起它变化的原因。单一职责在项目中的使用:1.项目中的新手引导变量的管理可以统一在各自的Modle中用单独的类来管理2.MVP模式P层生命周期与V层生命周期的同步可以用单独的包装类来实现,3.各种基础框架功能的定义,例如:图片的加载、缓存

2017-12-24 22:57:20 20529 3

原创 android开发view简单总结

1.View是Android中所有控件的基类,View是一种界面层的控件的一种抽象代表了一个控件。ViewGrouo继承与VIew,所以View本身就可以是单个控件也可以是多个控件组成的一组控件2.View位置描述的几个点:top.left.right.bottom,这几个值均是针对Vie原始位置的上左右下位置信息,即使View移动时,其值也不会发生变化,此时变化的是x和translationX,y

2017-12-03 23:22:01 236

原创 android中的bitmap的加载和cache

Android中目前比较常用的缓存策略是LruCache和DiskLruCache,其中LruCache常被用来做内存缓存,而DiskLruCache常被用作存储缓存。LruCache是Least Recently Used,即最近最少使用算法,这种算法的核心思想是:当缓存快满时,会淘汰近期最少使用的缓存目标。高效加载Bitmap的核心思想是采用BitmapFactory.Options来加载图片所

2017-12-03 23:16:35 248

原创 android中的线程和线程池

操作系统中线程是系统调度的最小单元同时线程也是一种受限的系统资源,线程不可能无限制产生,并且线程的创建和销毁都会有相应的开销,当系统中存在大量的线程时,系统会通过时间片轮训的方式调度每个线程,因此线程不可能做到绝对的并行,一个进程中不可能频繁的创建和销毁线程,这样做是不高效的,因此采用线程池的方式,线程池会缓存一定数量的线程,通过线程池就可以避免因为频繁创建和销毁线程所带来的系统开销。主线程是指进程

2017-12-03 23:13:14 259

原创 android消息机制

Android消息机制主要指Handler的运行机制,Handler只是Android消息机制的上层接口,依赖于底层MessageQueue和Looper。MessageQueue:消息队列,内部存储了一组消息,以队列的形式对外提供插入和删除操作。虽然叫消息队列,但是它的内部存储结构并不是真正的队列,而是采用单链表的数据结构来存储消息列表的。Looper:循环器,由于MessageQueue只是一个

2017-12-03 23:07:04 138

原创 android开发window和windowmanager

Window是一个抽象类,具体实现是PhoneWindow。创建一个Window只需要通过WindowManager即可WindowManager是外界访问Window的入口,Window的具体实现位于WindowManagerService中,WindowManager和WindowManagerService的交互是一个IPC过程。Android中的所有试图都是通过Window呈现的。无论是Ac

2017-12-03 23:01:18 481

原创 android动画知识总结

Android中的动画可以分为三种:View动画、帧动画、属性动画View动画通过对场景里的对象不断做图像变换(平移、缩放、旋转、透明度)从而产生动画效果,是一种渐进式动画,并且View动画支持自定义。帧动画通过顺序播放一系列图像从而产生动画效果,可以简单理解为图片切换动画,很显然,图片过大就会导致OOM属性动画通过动态的改变对象的属性从而达到动画效果自定义View动画需要继承Animation这个

2017-12-03 22:56:18 122

原创 android开发布局优化—include、merge、viewstub源码分析总结

尽管Android SDK为开发者提供了各种各样的小部件来提供小型且可重用的交互元素,但开发者可能仍然需要重新使用特殊布局的较大组件。这就是我们所谓的布局复用。要有效地重新使用完整的布局,可以使用和标签在当前布局中嵌入另一个布局。重复使用布局非常有用,因为它允许开发者创建可重用的复杂布局。例如,是/否按钮面板,或带有说明文字的自定义进度栏。这也意味着您的应用程序的任何元素都可以在多个布局中提取,分别

2017-11-27 21:48:33 262

原创 Activity启动模式总结

1.在standard启动模式下,A启动了B(标准模式),那么B会进入到A所在的任务栈中2.当使用非Activity的Context启动standard模式的Activity的时候会报错们因为standard模式的Activity默认会进入启动它的Activity的任务栈中,由于非Activity类型的Context并没有所谓的任务栈,所以被启动的Activity不知所去解决办法:为待启动的Acti

2017-11-26 20:50:36 254

原创 kotlin学习小点总结1

1.扩展属性没有幕后字段,不能初始化,可以定义getter方法2.运算符重载要求函数名相同,参数个数相同,对参数类型和返回类型没有要求3.infix关键字可以自定义运算符,称之为中缀表达式,调用的时候类似于运算符的操作,不必用.调用,但是一般不推荐使用,会导致代码可读性降低,逻辑混乱4.Kotlin中的表达式返回值就是该代码块中的最后一行5.*运算符将数组展开成一个个元素,适用于vararg定义的变

2017-11-22 08:36:20 427

原创 android studio gradle依赖解析

Eclipse的依赖在AndroidStudio出现之前,使用Eclipse开发Android项目的时候,如果需要一个第三方的依赖库,我们必须找到该依赖,然后下载JAR文件并将其拷贝到项目,引用它。通常这些JAR文件在他们的名称中没有版本号,所以需要开发者手动添加JAR的版本,以便知道什么时候更新,同时还需要确保依赖库中存储了源代码管理系统,以便其他开发者在没有手动下载这些依赖库的时候,也可以使用基

2017-11-19 23:53:44 1347

原创 Android Studio之Gradle文件解析1

使用Gradle来构建Android项目对Android开发者而言并不陌生,因为当我们使用Android Studio来进行项目开发时,就一直在使用这种构建方式。Gradle构建一个新的Android项目时,会生成几个重要的gradle文件,一个setting.gradle文件,两个build.gradle文件: 这些文件都有什么用呢?依次说明1.根目录下的settings.gradle文件set

2017-11-15 08:52:06 355

原创 java 二分查找

二分查找又称折半查找,是一种较高效率的查找方法。优点:比较次数少,查找速度快,平均性能好,占用系统内存较少。缺点:要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。算法要求:1.必须采用顺序存储结构。2.必须按关键字大小有序排列。算法思想: 将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如 果x

2017-11-01 21:02:08 262

原创 kotlin学习day11:扩展函数

想一想,当我们使用Java开发Android的时候有没有遇到过这种场景:假设我们需要给某个类添加一个通用方法的时候,是不是必须继承这个类,然后去自定义我们的方法。例如我们要给TextView添加一个设置text的方法,我们就必须:public class SuperTextView extends TextView { public SuperTextView(Context context)

2017-10-20 00:31:05 345

PermissionsDemo

Android 6.0权限封装

2017-08-01

自定义闪屏页广告倒计时view

自定义闪屏页广告倒计时view

2017-05-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除