自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小黄人的博客

编程爱好

  • 博客(87)
  • 收藏
  • 关注

原创 收藏

Android国内一些比较知名的大牛Android 一些比较厉害的大牛博客国内Android开发技术大牛推介Android 开发大牛博客Android 源码网盘地址清华大学2018招生宣传片《毕业答卷》...

2018-07-26 21:01:50 324

原创 linux虚拟机 使用及排错

linux 虚拟机使用及排错虚拟机连不上网检查网络是否开启共享检查服务(VMWare DHCP 及 Nat 服务)是否启动,如果手动启动不了,可能是安装出问题了,先在控制面板的卸载里面双击VMWare,然后里面有个修复选项,如果没法修复,那就是虚拟机装错了,我出现这个问题是我安装VMWare之后手动改变了系统的默认安装目录,还原默认安装目录之后重新安装就好了。linux创建文件夹...

2020-01-30 10:47:26 330

原创 LeetCode 10 正则表达式匹配,最简单易懂的动态规划

文章目录LeetCode 10 正则表达式匹配上代码LeetCode 10 正则表达式匹配题目链接具体题目我就不在这里重复打了,这里再次说一下他的规则。“ . ” 点可以被替换成任意字符“ * ” 星可以重复前面的那个字符任意多次,也可以删掉前面的字符。注意:这里要说明的是如果前面是个点,也是可以被重复任意多次的,也可以被删除上代码本题的动规思想我直接使用例子说...

2019-10-07 17:46:54 254

原创 Android 使用Room 生成不了数据库文件

异常如下java.lang.RuntimeException: cannot find implementation for com.snowman.myapplication.UserDatabase. UserDatabase_Impl does not existcom.snowman.myapplication.UserDatabase. UserDatabase_Impl does ...

2019-08-06 20:32:29 5714

原创 Android-事件分发机制

Android-事件分发机制注:参考郭神博客本人在郭神的基础上做下总结,尽量以更简单的语法让你事件分发机制开始从View的点击事件开始吧还记得我们在代码中怎么为一个Button设置他的点击事件嘛?如下findViewById(R.id.bt_test).setOnClickListener(new View.OnClickListener() { @Ov...

2019-03-23 14:57:46 436

原创 Android-约束布局学习

Android-约束布局学习相对位置属性属性名含义layout_constraintTop_toTopOf本布局的下方是谁layout_constraintBottom_toBottomOf本布局的下方是谁layout_constraintEnd_toEndOf本布局的右边是谁layout_constraintStart_toStartOf本布局的...

2019-03-03 23:14:13 869

原创 插件化入门-最简单的Hook技术,让你的Activity不用注册就可以启动

插件化入门-最简单的Hook技术,让你的Activity不用注册就可以启动注:插件化是将未安装的apk文件里面的Activity加载至内存,作用是让主应用不用那么庞大,我们只需要下载一系列的插件化包即可实现我们App功能的扩展,而加载未安装的Apk文件最重要的技术就是Hook技术,本文就来看一下Hook技术的原理实现效果,可以启动一个并不在Androidmanifest文件里面注册的Acti...

2019-02-26 09:33:58 945 7

原创 AsyncTask源码解析

AsyncTask源码解析AsyncTask是安卓中的一种轻量级的异步任务类,他可以在线程池中执行后台任务,然后把执行进度与结果传递给主线程,从而实现后台任务与UI线程的交互,我们现在先来看看他的简单使用方法简单使用一般来说,我们所要执行的耗时任务莫过于网络请求了,下面这个例子就以网络请求为例AsyncTask是一个抽象类,我们需要去写一个继承自AsyncTask的类来实现我们...

2018-09-12 16:48:33 154

原创 设计模式之抽象工厂模式

抽象工厂模式模式介绍创建性模式之一,抽象工厂模式起源于以前对不同操作系统的图形化解决方案,如不同的操作系统中的按钮和文本框控件其实现是不同的,对于每一个操作系统,其本身就构成一个产品类,而按钮与文本框控件也构成一个产品类,两种产品类两种变化,各有各自的特点模式定义为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定他们的具体类使用场景一个对象家族中有相...

2018-09-05 20:41:36 175

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

工厂方法模式模式介绍工厂方法模式是创建性设计模式之一。它是一种结构简单的模式,在我们平时开发中应用很广泛,也许你并不知道,但是你已经使用了无数次该模式了,如Android中的Activity里的各个生命周期方法,以onCreate方法为例,他就可以看做一个工厂方法,我们在其中可以构造我们的VIew,并通过setContentView返回给FrameWork处理等定义定义一个用...

2018-08-16 09:38:50 161

原创 Android值Intent匹配规则挖掘(PMS获取系统apk信息过程)

原型模式介绍原型模式是一个创建型模式。原型二字表明了该模式应该有一个样板实例,用户从这个样板对象中复制出一个内部属性一致的对象,这个过程也就是我们俗称的克隆,被复制的实例就是我们所称的原型,这个原型是可定制的,原型模式多用于创建复杂的或者构造耗时的实例,因为这种情况下,复制一个已经存在的实例可使程序运行更高效定义用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象...

2018-08-15 12:34:57 1129

原创 设计模式之原型模式

原型模式介绍原型模式是一个创建型模式。原型二字表明了该模式应该有一个样板实例,用户从这个样板对象中复制出一个内部属性一致的对象,这个过程也就是我们俗称的克隆,被复制的实例就是我们所称的原型,这个原型是可定制的,原型模式多用于创建复杂的或者构造耗时的实例,因为这种情况下,复制一个已经存在的实例可使程序运行更高效定义用原型实例指定创建对象的种类,并通过复制这些原型创建新的...

2018-08-15 12:33:24 560

原创 深入理解WindowManager

WindowManager我们知道Window是通过WindowManager来管理的,而与WindowManager对应的还有一个WMS(WindowManagerService)那么他们两者到底是怎么工作的呢?接下来我们就来具体分许一下这篇文章我们重点分析WindowManager的基本知识脉络,而不去看具体的实现细节,我们只关心WindowManager和WindowManagerS...

2018-08-13 12:54:15 2891

原创 设计模式--Builder模式

Builder模式模式介绍Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下可以更精确的控制对象的构造流程该模式是为了将构建复杂对象的过程和他的部件解耦,使得构建过程和部件的表示隔离开来。因为一个对象可能有很多个组成部分,比如说汽车有车轮,方向盘,发动机,还有各种小零件等,如何将这些部件组装成一辆汽车,这个过程是相当漫长的,对于这种情...

2018-08-10 21:58:39 338

原创 设计模式之单例模式+LayoutInflater分析

单例模式单例模式是应用最广的模式之一,在应用这个模式时,单例对象的类必须保证只有一个实例存在,许多时候整个系统只需要拥有一个全局变量,这样有利于我们协调系统整体的行为定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例使用场景:当创建一个对象需要消耗的资源太多的时候,如要访问IO和数据库等资源的时候,就可以考虑使用单例模式UML类图 角色介绍Client:高层客...

2018-08-09 21:53:39 386

原创 面向对象的六大原则(二)

面向对象的六大原则(二)昨天看书学习了六大原则的前两个,单一职责原则和开闭原则,假若不太了解的同僚可以去这里参观一下今天我们接着往下看,先来瞧瞧里氏替换原则里氏替换原则定义:如果对每一个类型为S的对象O1,都有类型为T的对象O2,使得以T定义的所有程序P在所有的对象O1都替换成O2时,程序P的行为没有发生变化,那么类型S就是类型T的子类型;阿西吧,定义太冠冕堂皇了,用白话...

2018-08-08 20:22:58 136

原创 面向对象的六大原则(一)

单一职责原则读《Android源码设计模式》单一职责的定义为:就一个类而言,应该仅有一个引起它变化的原因,简单来说,一个类中应该是一组相关性很高的函数,数据的封装我们从最入门的方式入手入手假设现在要实现图片加载的功能,并且能将图片缓存,我们可能写出的代码是这样的public class ImageLoader { //图片缓存 LruCach...

2018-08-07 19:39:41 481

原创 为控件添加阴影效果-最简单的实现方法

为控件添加阴影效果-最简单的实现方法我们知道Android5.0 引入了Z轴的概念,于是就有着这种风格,也就是目前比较火的Material Design。我们可以直接为控件设置android:elevation这个属性,来让他实现“漂浮”效果可是,我们日常常用的一些最基本的Button这些东西却是不支持这个属性那么,我们如果想让我们的控件浮起来,该怎么办呢?实现效果 ...

2018-08-06 19:35:41 3150

原创 Android的Handler消息机制

Android的消息机制概述Android的消息机制主要是指Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑。Message只是一个单链表构成的存储消息的列表Looper是一个无限循环的机制,一遍一遍的去查询Message是否有新消息,如果有就去处理,没有就继续循环等待Looper中还有一个特殊的概念(ThreadLocal)...

2018-08-03 10:46:00 290

原创 Android中的IPC方式

Android中的IPC方式在上一篇,我们探索了IPC的基本知识,序列化,和Binder的基本实现原理本篇我们来看看Android中的一些具体的跨进程通信的方式使用Bundle我们知道,四大组件中的三大组件(Activity,Service,Broadcast)都是支持在Intent中传输Bundle数据的,由于Bundle实现了Parcelable接口,所以他可以很方便的...

2018-08-02 09:41:15 1825

原创 Android-IPC机制探索

IPC机制IPC含义为进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。按照操作系统的说法,在pc或者移动设备上,进程一般指一个执行单元,一般指一个程序或者一个应用。对于Android这个基于Linux内核的移动操作系统,他的进程间通信方式并不完全依赖于Linux,相反,他有自己的进程间通信方式 ,在Android中最有特色的进程间通信方式就是Binder了,通过Binder可...

2018-07-31 10:38:56 594

原创 Android四大组件-Service工作过程探究

Service工作过程服务是一种运行在后台的组件,可能我们一般情况是见不到服务的具象表现的,但是他在我们的android开发中却是不可或缺的东西,下来我们就来结合源码具体分析一下他的工作过程如果对service的使用还是不太了解的话,烦请移驾这里Service运行状态我们知道,service分为两种工作状态,启动状态(主要用于后台数据的计算),绑定状态(主要用于其他组件和Ser...

2018-07-27 21:59:43 659

原创 Android-Service再探

Service先看一下官方的解释A Service is an application component representing either an application’s desire to perform a longer-running operation while not interacting with the user or to supply functionali...

2018-07-27 16:21:50 315

原创 从零学习RxJava2.0-功能性操作符

功能性操作符辅助被观察者(Observable) 在发送事件时实现一些功能性需求来张盗的图 来一一学习吧订阅(连接被观察者 & 观察者)subscribe对于这个这里就不再说了,太熟悉了线程调度(切换被观察者和观察者的线程)subscribeOn , observeOn代码Observable.create(new Ob...

2018-07-26 20:27:32 518

原创 从零学习RxJava2.0-组合 / 合并操作符

组合 / 合并操作符组合 多个被观察者(Observable) & 合并需要发送的事件组合多个被观察者操作符1:concat,concatArray二者区别:组合被观察者的数量,即concat()组合被观察者数量≤4个,而concatArray()则可>4个Observable.concatArray(Observable.just(1,2), ...

2018-07-26 16:38:02 430

原创 从零学习RxJava2.0-变换操作符

RxJava-变换操作符对事件序列中的事件 / 整个事件序列 进行加工处理(即变换),使得其转变成不同的事件 / 整个事件序列还是直接看代码效果吧变换操作符1:map对 被观察者发送的每1个事件都通过 指定的函数 处理,从而变换成另外一种事件Observable.create(new ObservableOnSubscribe<Integer>() { ...

2018-07-26 10:41:35 289

原创 从零学习RxJava2.0-操作符入门

操作符入门“创建”操作符创建 被观察者( Observable) 对象 & 发送事件。普通创建操作符1:create作用:完整创建1个被观察者对象(Observable)Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer&g...

2018-07-25 21:40:20 354

原创 从零学习RxJava2.0-简单入门

前言函数式编程:函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值),和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。和过程化编程相比,函数式编程里函数的计算可随时调用。RXJava当我们的异步网络请求用的越来越多的时候,rxjava是一...

2018-07-25 20:20:12 273

原创 浅析观察者模式

观察者模式观察者模式又被称为发布——订阅模式,属于行为型设计模式的一种,是一个在项目中经常使用的模式。定义:定义对象间一种一对多的依赖关系,每当一个对象改变状态时,则所有依赖于他的对象都会得到通知并被自动更新。四个角色1.Subject抽象主题,(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可...

2018-07-24 20:43:40 242

原创 四大组件之Activity的工作过程学习

Activity的启动流程让我们从Activity的启动开始看起,当我们在程序中显式启动一个Activity的时候,我们通常使用如下两句代码Intent intent = new Intent(this,SecondActivity.class);startActivity(intent);直接进startActivity()方法看看,发现他重载了好多次,但最终调用的都是s...

2018-07-24 19:30:30 371

原创 android之Window学习

Windowwindow,顾名思义,窗口,他是一个抽象的概念,我们可以将Window理解为手机屏幕的区域他是一个抽象类,Window的具体实现类是PhoneWindow,实现位于WindowManagerService中,如果我们接触过View事件分发的原理,就会知道一个Activity的最底层就是一个PhoneWindow,然后再是DecorWindow等一.简单使用先来...

2018-07-23 18:12:44 350

原创 git学习笔记

git学习安装与基本配置这里不再阐述,网上一大堆安装配置好之后1.查看配置信息查看配置信息—————git config –list 查看git项目通用的配置信息———–git config –list –global 获取单独的配置信息 ————–git config user.name修改配置————–git config –global user...

2018-07-21 17:29:36 267

原创 开发艺术探索之RemoteView学习

RemoteView简单使用RemoteView在通知栏的使用通知栏除了默认的布局格式之外,还支持自定义布局先看一下通知栏默认布局格式的使用Intent intent = new Intent(this,RemoteView_goActivity.class); PendingIntent pendingIntent = PendingIntent...

2018-07-20 21:37:26 437

原创 OkHttp源码解析

OkHttp源码解析同步请求方式OkHttpClient client = new OkHttpClient.Builder().build();final Request request = new Request.Builder() .url("") .build();try { Response response = client....

2018-06-23 21:34:21 919

原创 Volley学习及源码分析总结

Volley的简单使用Volley是2013年google退出的网络框架,他的优点是适合进行数据量不大但频繁的通信,对于一些数据量大的网络请求却是表现的非常差要使用Volley请求网络,我们需要下载到他的jar包,在项目下add他使用队列来管理网络请求,接下来看一下Volley的简单用法先创建管理网络请求的队列RequestQueue queue = Volley.newRe...

2018-06-11 23:19:53 296

原创 Android 数据库学习总结

android 数据库学习总结android 为了让我们能方便的使用数据库,给我们提供了一个SQLiteOpenHelper帮助类它是一个抽象类,所以我们需要自定义一个类来继承这个类来实现我们创建数据库的逻辑实现逻辑创建以及更新先说一下他的构造方法,我们一般重写第一个(有四个参数的)构造方法四个参数分别的意思是(context,数据库名,null(这里也允许...

2018-06-09 16:28:08 1506

原创 LitePal学习

Android数据库的git库LitePal学习学习之前配置依赖库,具体版本见官方gitcompile 'org.litepal.android:core:2.0.0'如果是android studio,以project打开项目,在src->main下新建文件夹命名assets,再在内部新建litepal.xml文件具体结构看图(这里一定不能错) lite...

2018-06-09 16:27:42 226

原创 进阶之光-事件总线学习

事件总线介绍三要素Event:事件,可以是任意类型的对象Subscriber:事件订阅者,在EventBus3.0之前消息处理的方法只能限定OnEvent,onEventMainThread,onEventbackgroundThread和onEventAsync,他们分别代表四种线程模型,在3.0之后,事件处理的方法可以随便取名,但是需要添加一个注解@Subscriber,并...

2018-06-03 20:55:50 197

原创 安卓进阶之光-Retrofit使用入门

Retrofit使用入门Retrofit底层基于okHttp,它更多的使用运行时注解的方式提供功能相对于okhttp来说,retrofit相对来说做的主要是数据的处理封装使用前先添加依赖在项目的build.gradle下添加dependencies { compile 'com.squareup.retrofit2:retrofit:2.4.0'}关于...

2018-06-03 13:57:13 449

原创 安卓自定义控件学习总结

安卓自定义控件学习总结学习自定义控件已经好长时间了,前前后后学习了布局知识,绘图知识,以及动画知识,这些无论对哪一个自定义的控件来说都是至关重要的在这期间主要参考了启舰大神的博客以及官方文档和源码下面就最近学到的东西总结一下,以后写到相关知识也会及时更新继承View自定义View篇这里我主要初学自定义View时,对onMeasure,onLayout,以及onDraw方法的熟悉,理解了他们在什么时...

2018-05-26 15:33:08 419

空空如也

空空如也

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

TA关注的人

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