自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 资源 (1)
  • 收藏
  • 关注

原创 RxJava学习(一)之简单使用

一、简介RxJava是一个响应式的编程,基于观察者模式二、简单使用1、无背压 private fun initListener() { mRxJavaRecycleTest.onClick { Log.i(TAG,"==mRxJavaRecycleTest==") Observable.create<String> { emitter-> emitte

2020-05-18 17:42:11 228

原创 JAVA设计模式之观察者模式

一、简介当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。二、实现1、抽象被观察者(Observable)public abstract class Observable { List<Observer> observers = new ArrayList<>(); public void add(Observer observer){ observers.a

2020-05-18 15:21:08 201

原创 Java多线程(二)之Thread

一、创建线程的方式1、扩展Thread类 public static class MyThread extends Thread{ @Override public void run() { super.run(); System.out.println("I am extends Thread"); } }2 继承runnable public static class MyRun

2020-05-10 20:00:53 266

原创 Java多线程(一)之基本概念

CPU核心数和线程数的关系目前主流CPU有双核、三核和四核,六核等。增加核心数目就是为了增加线程数,因为操作系统是通过线程来执行任务的。一般情况下它们是1:1对应关系,也就是说四核CPU一般拥有四个线程。但 Intel引入超线程技术后,使核心数与线程数形成1:2的关系。比如常见的双核四线程,就是使用了超线程技术。CPU时间片轮转机制平时在开发的时候,感觉并没有受cpu核心数的限制,想启动线程就启动线程,这是因为操作系统提供了一种CPU时间片轮转机制。又称RR调度。时间片轮转算法的基本思想是:根据先进

2020-05-10 19:26:47 186

原创 Android8.0之应用图标适配

一、简介参考Android应用图标微技巧,8.0系统中应用图标的适配文章当设置target=26及以上,在8.0不做适配,就会显示成一个圆圈包围着logo,不好看。比如:从Android 8.0系统开始,应用程序的图标被分为了两层:前景层和背景层。在设计应用图标的时候,需要将前景和背景部分分离,前景用来展示应用图标的Logo,背景用来衬托应用图标的Logo。二、适配Android St...

2019-09-12 15:59:16 305

原创 Android开源框架之glide (三)

glide的缓存处理一、内存缓存在之前的源码分析Engine的load()方法时候,会首先从两个缓存当中加载数据从弱引用中获取缓存数据和从内存缓存中获取缓存数据。public <R> LoadStatus load(/*各种参数*/) { // 根据请求参数得到缓存的键 EngineKey key = keyFactory.buildKey(model, sign...

2019-07-17 18:56:24 120

原创 Android开源框架之glide (二)

源码解析glide的使用就是:Glide.with(this) .load(IMG_PATH) .into(imageView);1、with()方法@NonNullpublic static RequestManager with(@NonNull Context context) { return getRetriever(context).get(contex...

2019-07-17 18:47:36 783

原创 Android开源框架之glide (一)

一、简介Glide是一个加载图片的库,作者是bumptech。是google推荐使用的图片加载库。特性:1、可以从多个源加载图片,如:网路,本地,Uri等。2、可以加载gif图片。Picasso不能加载git图片3、生命周期和Activity/Fragment一致。3、默认Bitmap格式是PREFER_ARGB_8888,Glide4.0之前是PREFER_RGB_565二、使用...

2019-07-17 15:57:19 841

原创 Android开源框架之Retrofit (二)

源码解析Retrofit通过使用大量的设计模式进行功能模块的解耦。Retrofit将各个功能模块进行了封装,只暴露了Retrofit核心类,只管配置Retrofit,然后做请求。剩下的事情就跟上层无关了,只需要等待回调,这就是外观模式的运用。1、Retrofit实例是使用建造者模式通过内部Builder类进行创建的。public static final class Builder { ...

2019-07-17 15:44:18 323

原创 Android开源框架之Retrofit (一)

一、简介Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。严格地说,Retrofit2并不是一个网络请求交易框架,它只是对网络请求框架的封装。底层把实现交给了okhttp3,由okhttp3做真正的网络请求。Retrofit2优势在于,它使用了大量的设计模式将功能模块解耦,这样做的好处在于可以让流程更加清晰,可塑性更强。支持各种格式转换以及RxJava。二、使用...

2019-07-17 09:51:21 141

原创 Android开源框架之EventBus(二)

理解了EventBus的源码之后,接下来就仿照实现一个自己的EventBus一、创建一个TestThreadModepublic enum TestThreadMode { MAIN, BACKGROUND}二、创建一个TestSubscribe注解类@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUN...

2019-07-16 18:50:30 89

原创 Android开源框架之EventBus(一)

一、简介EvenetBus是一种发布-订阅事件总线.代码简洁,开销小,并很好的实现了发送者和接收者的解耦.(是一种观察者模式)二、用到的设计模式1、单例模式:一个类有且仅有一个实例,并且自行实例化向整个系统提供。2、建造者模式:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。使用Builder3、观察者模式:定义了对象之间的一对多依赖,当一个对象改变状态时,它...

2019-07-16 17:51:20 172

原创 Android开源框架之Volley(二)

源码分析1、入口Volley.newRequestQueue(context),代码如下:public static RequestQueue newRequestQueue(Context context) { return newRequestQueue(context, null);}这个方法仅仅只有一行代码,只是调用了newRequestQueue()的方法重载,并...

2019-07-16 16:54:29 170

原创 Android开源框架之Volley(一)

一、简介Volley是Google在2003年的I/O大会上推出的通信框架。适用于数据量小、频率高的请求。不适合大数据加载二、volley的使用1、创建RequestQueue对象 RequestQueue queue = Volley.newRequestQueue(context);2、创建一个request对象,系统提供了几种StringRquest、JsonRequest...

2019-07-16 16:08:12 316

原创 Android学习之view滑动冲突

常见的滑动冲突的场景一般可分为三种:场景一、外部滑动方向与内部滑动方向不一致场景二、外部滑动方向与内部滑动方向一致场景三、上面两种情况的嵌套第一种场景:由于外部与内部的滑动方向不一致,那么可以根据当前滑动方向,水平还是垂直来判断这个事件到底该交给谁来处理。至于如何获得滑动方向,可以得到滑动过程中的两个点的坐标。一般情况下根据水平和竖直方向滑动的距离差就可以判断方向,当然也可以根...

2019-07-16 15:51:27 92

原创 Android学习之view事件分发

一、view的基础知识:1、view的坐标<1> 在onTouchEvent中event.getX():表示的是触摸点距离view左边界的距离event.getY():表示的是触摸点距离view上边界的距离event.getRawX():表示的是触摸点距离屏幕左边界的距离event.getRawY(): 表示的是触摸点距离屏幕上边界的距离<2> 在view中...

2019-07-16 15:46:48 145

原创 Android学习之view的绘制

一、view绘制流程view树 递归measure -> layout -> drawViewRootImpl是windowManager和DecorView的纽带View的绘制是从ViewRootImpl的performTranslate方法开始的,经过measure、layout、draw三个过程才绘制出来的。measure用来测量view的宽高,layout是用来确定v...

2019-07-16 15:19:22 95

原创 Android学习之ListView缓存机制分析

一、ListView的继承结构ListView是直接继承自的AbsListView,而AbsListView有两个子实现类,一个是ListView,另一个就是GridView,因此ListView和GridView在工作原理和实现上都是有很多共同点的。AbsListView又继承自AdapterView,AdapterView继承自ViewGroup二、Adapter的作用适配器List...

2019-07-16 12:33:57 257

原创 Android基础之Activity

一、activity生命周期1、activity的4中状态running/paused/stoped/killed2、activity的生命周期//--------------单个A启动---------------------A启动: onCreate---->onStart---->onResume 处于running状态点击HOME键: ...

2019-07-16 11:44:09 126

原创 Android基础之service

一、service 简述后台开启 程序退出后仍然可以人为进行操作运行是一种可以在后台执行长时间运行操作而没有用户界面的应用组件运行在UI线程不能做耗时操作二、service与Thread区别它们之间没有任何关系Thread 是运行相对独立 程序执行的最小单元 可以通过开启一个子线程来做耗时操作service运行依托于主线程 不能做耗时操作 否则会报ANR三、service启动方...

2019-07-16 11:23:18 107

原创 Android基础之fragment

一、fragment与Activity生命周期结合说明fragment f, Activity a:创建:f.onAttach()->f.onCreate->f.onCreateView()->f.onViewCreated()---->a.onCreate()->f.onActivityCreated()—>a.onStart()->f.onStar...

2019-07-16 11:05:18 133

原创 Android基础之广播

一、广播的定义四大组件之一在Android中,Broadcast是一种广泛运用的在应用程序之间传递信息的机制,发送广播使用Intent,intent可以携带数据有两个角色,广播的发送者和广播的接受者二、广播的使用场景<1>在Android不同组件之间的通信(应用内/不同应用之间)<2>多线程通信<3>与 Android 系统在特定情况下的通信 如:...

2019-07-16 10:55:21 183

原创 Android基础之Binder

一、IPC进程间通信。多个进程间的数据交互进程一般是指一个可执行的单元,在PC或移动设备上指一个程序或应用。线程是CPU最小的调度单元,是一种有限的系统资源一个进程中可以包含多个线程如果将一个耗时操作放在主线程,就会造成ANRAndroid中进行进程间通信最特色的就是使用Binder,同样也可以使用Socket进行进程间通信Android可以通过给四大组件指定android:proc...

2019-07-16 10:42:29 111

原创 Android基础之RemoteViews

一、简介RemoteViews是一种远程View,可以在其他进程中显示,为了能够更新它的界面,RemoteViews提供了一组基础操作用于跨进程更新它的界面。RemoteViews常用在通知和桌面小组件中。二、使用RemoteViews在通知栏上的应用1、简单使用<1> 创建NotificationManager对象NotificationManager manager ...

2019-07-15 19:43:05 529

原创 Android基础之Notification

一、定义是一种具有全局效果的通知,它展示在屏幕的顶端,首先会表现为一个图标的形式,当用户向下滑动的时候,展示出通知具体的内容。二、使用Android 3.0 (API level 11)之前,使用new Notification()方式创建通知。Android 3.0开始弃用new Notification()方式,改用Notification.Builder()来创建通知。为兼容API...

2019-07-15 19:19:45 149

原创 Android异常与性能优化之内存管理与泄漏

一、内存管理机制概述1、分配机制 操作系统为每一个进程分配一个合理的内存2、回收机制 系统在内存不足的情况下会合理的回收而再分配的机制二、Android内存管理机制1、分配机制 Android为每个进程分配一个弹性的内存2、回收机制 根据进程的优先级来杀死进程三、内存管理机制的特点1、占用更少的内存2、在合适的时候,合理的释放系统资源3、内存紧张的时候,能释放掉大部分...

2019-07-15 19:04:36 141

原创 Android异常与性能优化之冷启动优化

一、冷启动的定义1、冷启动的定义冷启动就是在启动应用前,系统中没有该应用的任何进程信息。比如第一次启动2、冷启动与热启动的区别热启动就是用户按home键退出应用然后马上又重新启动应用区别:<1> 冷启动在启动时没有该应用的进程信息,这时候启动系统就会为该应用创建新的进程,而热启动的进程是保留在后台的<2> 冷启动会创建新的进程所以先会创建Applicatio...

2019-07-15 18:59:45 78

原创 Android异常与性能优化之UI卡顿

一、UI卡顿原理 60fps -> 16ms 渲染 太多耗时操作 overdraw 过度绘制 布局中出现大量重复、嵌套二、卡顿原因 1、人为在UI线程中做轻微耗时操作,导致UI线程卡顿 2、布局Llayout过于复杂,无法16ms内完成渲染 3、同一时间动画执行的次数过多,导致CPU或GPU负载过重 4、View过度绘制,导致某些像素在同一帧时间内被绘制多次,...

2019-07-15 18:56:22 397

原创 Android异常与性能优化之crash异常处理

Android应用总是会不可避免的发生crash,也就是崩溃。Android提供了处理这类问题的方法,当crash发生的时候,系统就会回调UncaughtExceptionHandler的uncaughtException方法。在uncaughtException方法中就可以获取到异常信息,可以选择将异常信息存储到sd卡,然后在合适的时候将其上传到服务器。实现方法:<1> 创建一个...

2019-07-15 18:54:44 267

原创 Android异常与性能优化之oom异常

一、oom定义 当前占用内存加上申请的内存资源超过了虚拟机的最大内存限制,就会抛出Out Of Memory 二、一些容易混淆的概念内存溢出(oom) / 内存抖动 / 内存泄漏内存抖动是指在短时间内有大量的对象被创建或者被回收的现象。内存泄漏是指某一段内存在程序里功能上已经不需要了,但是垃圾回收机制回收内存时检测那段内存还是被需要的,不能被回收,这种在程序中在没有使用的但是又不能被回...

2019-07-15 18:50:10 257

原创 Android异常与性能优化之anr异常

一、什么是ANRApplication Not Responding默认Activity最长执行时间5s 超过就会ANR 在广播接受者中最长是10s在主线程中做了耗时操作二、造成ANR的主要原因主线程耗时计算操作主线程被IO操作阻塞三、解决ANR在子线程中做耗时操作Activity的onCreate和onResume中避免做耗时操作...

2019-07-15 18:46:52 279

原创 Android学习之webview常见问题

一、webview常见的一些坑1、webview在布局文件中的使用,webview写在其他容器中。webview的销毁:先把父容器中的webview移除,再调用webview的ondestory2、jsbridge3、webviewClient.onPageFinished由于页面跳转的原因,会回调多次4、后台耗电。会开启一些线程,处理不当导致线程一直在后台运行。在退出时需要彻底销毁web...

2019-07-15 18:42:15 218

原创 Android学习之Matrix

一、Matrix基础知识Matrix是一个3x3的矩阵,主要用于缩放、平移、旋转等操作其中:MSCALE_X和MSCALE_Y控制缩放MSKEW_X 和MSKEW_Y 控制错切MTRANS_X和MTRANS_Y控制平移 MSCALE_X、MSCALE_Y和MSKEW_X、MSKEW_Y控制旋转MPERSP用于处理透视(不常用)由此可以看出Matrix的对图像的处理可分为四类基本变...

2019-07-15 18:36:08 461

原创 Android开发之编译FFMPEG为动态库

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec接下来介绍一下分别在Windows和Linux下编译出android需要的动态库文件一、windows下编译1、准备工具MinGWAndroid NDK r14b wind...

2019-07-15 17:40:29 316

原创 Android学习之NDK开发

JNIJava Native Interface(Java 本地编程接口),一套编程规范.提供了若干的 API 实现了 Java 和其他语言的通信(主要是 C/C++)。Java 可以通过 JNI 调用本地的 C/C++ 代码,本地的 C/C++ 代码也可以调用 java 代码。Java 通过 C/C++ 使用本地的代码的一个关键性原因在于 C/C++ 代码的高效性。NDKNative ...

2019-07-15 17:27:55 275

原创 JAVA设计模式之生产者-消费模式

一、简介生产者消费者模式并不是GOF提出的23种设计模式之一,23种设计模式都是建立在面向对象的基础之上的,但其实面向过程的编程中也有很多高效的编程模式,生产者消费者模式便是其中之一,它是我们编程过程中最常用的一种设计模式。拿生活中的例子来说,工厂生产出来的产品总是要输出到外面使用的,这就是生产与消费的概念。在软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负...

2019-07-15 17:11:49 230

原创 JAVA设计模式之模板模式

一、定义定义一个操作中的骨架,而将一些步骤延迟到子类中。模板方法使子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。二、概述类中的方法用以表明该类的实例所具有的行为,一个类可以有许多方法,而且类中的实例方法也可以调用该类中的其他方法。在开发过程中,可能需要将类的许多方法集成到一个实例方法中,以此来表示一个算法的骨架。比如车站安排上车都需要进行安检、验票、选择候车室等步骤。因此就可...

2019-07-15 17:04:32 142

原创 JAVA设计模式之代理模式

一、定义为其他对象提供一种代理以控制对这个对象的访问。二、概述当用户与某个对象打交道时,但程序可能不希望用户直接访问对象,而是提供一个特别的对象,这个特别的对象就被称为代理对象。在代理模式中,代理的特点是:代理对象与目标对象实现了相同的接口,以达到透明地替换原来的对象。代理可能会需要验证某些信息或检查它所代理的对象是否可用,之后才会让所代理的对象调用同样的方法。比如秘书是老板的代理,老板...

2019-07-15 16:53:37 203

原创 Java学习之http协议缓存

一、简介http协议缓存分为强制缓存和协商(对比)缓存。区别:1、强缓存命中的话不会发请求到服务器2、协商缓存一定会发请求到服务器,通过资源的请求首部字段验证资源是否命中协商缓存,如果协商缓存命中,服务器会将这个请求返回,但是不会返回这个资源的实体,而是通知客户端可以从缓存中加载这个资源。两类缓存规则可以同时存在,强制缓存优先级高于对比缓存,也就是说,当执行强制缓存的规则时,如果缓存生效...

2019-07-15 16:30:24 311

原创 Android线程交互之IntentService

一、简介IntentService是一种特殊的Service,它可以进行一些后台的耗时操作,在任务执行结束后会自动停止。由于它是一种服务,所以它的优先级要高于普通的线程,不容易被系统杀死。内部封装了HandlerThread 和 Handler二,使用1、创建IntentService的子类,实现onHandleIntent(@Nullable Intent intent)方法和构造方法...

2019-07-15 12:22:26 244

bsdiff.zip

Android增量更新工具bsdiff、bzip2以及windows下的bsdiff-win(包括64位和32位)

2019-06-18

空空如也

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

TA关注的人

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