自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 问答 (1)
  • 收藏
  • 关注

原创 超全面 struts2 复习总结笔记

前言What ? 最近怎么开始写后端的博客了? 从去年开始就经常看到别人提“移动开发寒冬”,而年初投简历的时候更是亲身体会,不写3年经验连面试机会都没有,那么没有经验或经验少的人能怎么办呢,从一开就找不到工作怎么可能会有经验? 然而绝望并没有用,我算运气好,勉强找到一份工作。从趋势来看,近几年移动开发待遇不会很好,今年发现到处缺后端,于是决定还是搞后端吧,因为搞安卓不过一年,后端的知识还没忘完(

2017-03-22 21:02:32 6858 6

原创 机器学习笔记 监督学习算法小结(一)

前言坚持写博客半年多了,但感觉自己没有写技术博客的天赋,写出来的东西深度和广度都欠缺,也不容易理解。事实上大部分技术博客都存在这些问题,但即便写得不好,也会起到一定作用,所以我还是决定坚持写下去。接触机器学习有一段时间了,感觉还是挺有意思的,趁着对理论概念还没忘记的时候,把知识点总结下来。这系列文章是学习笔记,更适合用来复习。监督学习算法朴素贝叶斯(Naive Bayes)决策树(Decisio

2017-02-04 12:16:36 9013

原创 BottomNavigationView从入门到强行改造,取消位移动画?和ViewPager绑定?添加Badge?

前言BottomNavigationView 这个官方控件出了几个月了,也有一些介绍该控件的文章,但我发现大部分博文只是做了简单的用法介绍,并未解决一些需求,比如:取消位移动画、和ViewPager一起使用、加入Badge。所以我又写了这么一篇博客。考虑到一些人可能没时间看到最后,我把改造的库地址放在最前面 BottomNavigationViewEx。基本用法1. 添加依赖compile 'com

2017-01-07 20:17:04 20310 8

原创 RxJava2.0在安卓中的二级缓存策略

前言在上一篇 安卓网络数据缓存策略 中,介绍了安卓中数据的缓存策略,这篇将用RxJava2.0 实现 Json/Xml 数据的二级缓存。 对于 RxJava2.0 不了解的,可以看一下这篇入门教程 从零开始的RxJava2.0教程1-4 。仿佛有一段时间没写博客了,吓得我都祭出了神图。 数据实时性高为了便于没有看过上一篇教程的同学理解,我先把伪代码再贴一次。如果 (存在缓存) { 读取缓

2016-12-04 00:49:09 7163 6

原创 安卓网络数据缓存策略

前言对于大部分 App 来说,网络请求都是必不可少的,而且不少App是以数据为主。如果不做数据缓存,在网络慢的情况下,会降低用户体验度。仿佛有一段时间没写博客了,吓得我都祭出了神图。 Json/Xml数据缓存策略对于文本类数据,同一个地址的请求结果一般是会随着时间而变化的,所以需要根据应用的需求来做缓存。数据实时性高 常见的此类应用:新闻、朋友圈、股票、社区等。 无论是否存在缓存,都应该去请

2016-12-04 00:43:09 6469

原创 从零开始的RxJava2.0教程(四)在安卓中的应用

1. 前言在第1 2 3篇中,我介绍了RxJava 2.0的基本用法。这一篇将介绍在安卓中的基本用法。 附上本系列教程的链接。 从零开始的RxJava2.0教程(一)基础 从零开始的RxJava2.0教程(二)操作符 从零开始的RxJava2.0教程(三)响应式的好处2. RxAndroidRxAndroid是RxJava针对Android平台的扩展库。曾几何时,RxAndroid确实提供了

2016-11-07 13:21:09 14755 17

原创 从零开始的RxJava2.0教程(三)响应式的好处

1. 前言在第一篇中,我介绍了RxJava的基础知识。第二篇中,我向你展示了操作符的强大之处。这一篇,我将向你介绍响应式的优点。 2. 错误处理到目前为止,我都没怎么介绍 onComplete 和 onError 方法。这两个方法用来通知订阅者,数据发送完成或出现错误。Flowable.create(new FlowableOnSubscribe<String>() { @Override

2016-11-07 13:14:34 6582 3

原创 从零开始的RxJava2.0教程(二)操作符

1. 前言在上一篇中,我介绍了RxJava 2.0的一些基础知识,同时也介绍了map()操作符。这篇blog将介绍许多RxJava中的操作符,RxJava的强大性就来自于它所定义的操作符。 首先先看一个例子: 2. 准备工作假设我的 Flowable 发射的是一个列表,接收者要把列表内容依次输出。根据上一篇blog的内容,你可以会写出这样的代码:List<Integer> list = new

2016-11-06 22:46:57 24296 9

原创 从零开始的RxJava2.0教程(一)基础

1. 为什么写这篇文章RxJava这些年越来越流行,而上月末(2016.10.29)发布了2.0正式版,但网上大部分关于RxJava的教程都是1.x的。关于2.0的教程基本是介绍1.x和2.x的区别,对于RxJava的老用户来说,自然看看和1.x的区别就大致会用了,但是对于新手来说,就不得不先学1.x。这样来说,学习成本就提高了,本身RxJava就不容易上手。为了让年轻的司机可以直接从2.0开始学习

2016-11-06 22:43:50 28098 17

翻译 RxJava 2.0有什么不同(译)

为什么翻译这篇文章ReactiveX 于2016.10.29 发布了正式版RxJava 2.0.0,但到我写本文章为止,还没有发现谁完整的翻译了官方的这篇文档 What’s-different-in-2.0。秉着旧事物迟早被新事物替代的想法,于是我用我没过6级的英语咬牙翻译下这篇文章,希望能帮助年轻的司机。但鉴于本人水平有限,翻译得不好,如果各位大神发现哪里写错了,欢迎发邮件通知我,我会在第一时间改

2016-11-05 14:37:46 23998 22

原创 Android Studio 2.2 多cpp文件自动包含及第三方so库调用

多cpp文件自动包含Android Studio 2.2 又重新加入了jni的支持,并且使用的是CMake,所以现在写jni不需要配置mk文件了。 但相应的,如果你在cpp文件夹中新建了cpp文件或头文件,就需要手动配置CMakeLists.txt文件。 IED自动生成的CMakeLists中默认添加的cpp文件只有native-lib.cpp。具体配置如下:add_library( # Set

2016-10-28 12:40:40 8448 4

原创 Android高版本适配总结1

目录权限适配写短信操作适配拦截短信操作适配查看App使用情况适配获取所有运行的App清除App缓存权限适配(安卓6.0 API api23)安卓6.0给权限进行了分类,所以就出现了运行时权限。运行时权限需要在代码中申请。 这里我收集了一份 Android 6.0的运行时权限。如果你的App涉及的运行时权限很少,可以考虑在需要使用的时候再申请,如果申请成功,就运行相应的代码,申请失败就

2016-10-27 22:20:56 1808

原创 Android 修改字体

TextView修改字体Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/ping_fang_light.ttf");tvName.setTypeface(typeface);全局修改字体首先需要自定义一个Application子类,在应用创建之后,就利用反射修改样式字段设置字体。 import java

2016-10-27 22:18:19 701

原创 Android6.0运行时权限列表

Android6.0运行时权限 权限组 权限 group:android.permission-group.CONTACTS permission:android.permission.WRITE_CONTACTS permission:android.permission.GET_ACCOUNTS permission:android.permission.READ_CONTAC

2016-10-22 15:06:20 1352

原创 Android Studio混淆打包忽略第三方jar包配置

写这篇博客的理由前段时间用Android Studioh的时候,碰到一些问题,网上找了很多资料,发现很多都是Copy Paste,找了许久没有找到有用的资料,然后在Stack Overflow中找到了部分答案。所以决定自己写一篇“有用的博客”。 启用混淆打包在Android Studio中只需要打开build.gradle文件,找到如下一段,把minifyEnabled 设置为 true,就

2016-10-20 12:48:34 12821 2

原创 安卓事件分发机制简解

1. 为什么需要了解安卓事件机制在开发过程中,我们免不了用到组合控件,这时候事件分发机制就显示比较重要了。如果你不了解,就可能出现父容器无法响应事件、子控件事件和父控件有冲突等问题。在了解分发机制之前,你需要知道安卓控件分类。2. 安卓控件分类ActivityActivity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。ViewGroup容器控件,可包含其他容器控件或非容器控件

2016-10-19 23:38:26 856

原创 Android Studio设置全屏Activity(填坑)

问题如何在Android Studio中做一个全屏的启动界面(Splash Activity)? 背景(基本是废话,没兴趣的请跳过)前段时间把IED换成Android Studio2.2之后,碰到了一些“坑”。就在今天,我打算新开一个项目,然后项目代码还没写就碰到问题了。以前在Eclipse中的通过配置Activity的theme已经不起作用了。然后我反射性的去查百度,

2016-09-26 22:25:17 15742 5

原创 安卓常用图形图像操作汇总

安卓中提供了非常多的图像和图像处理api,这里我总结了一些常用的操作。大图片加载在安卓中要把图片显示到界面上,需要把图片解析成Bitmap,然后设置到ImageView。解析的图片是比较耗费内存的,尤其是大图片,比如1920*1080的图片。如果不加做任何处理直接加载大图片,很可能会出现OOM(内存溢出),倒不是说连一张几M的图片都放不下,而是可能没有连续的足够大一块内存。加载

2016-09-23 23:56:23 733

原创 安卓Fragment快速入门

Fragment虽然不是四大组件之一,但在界面布局方面非常重要。Fragment的作用Fragment是API11时新引入的轻量级”Activity”。目的是为了更方便的适配大小屏幕,在平板和手机上可以有完全不同的Fragment。可以很方便的动态添加删除Fragment。 Fragment的编写Fragment类似于Activity,只要继承Fragment类即可。

2016-09-22 14:33:46 533

原创 安卓ContentProvider详解

ContentProvider是安卓四大组件之一,但与其他三种组件相比,并不是很常用,但同样重要。ContentProvider可以让应用之间相互共享资源,比通过公开的文件的共享方式更加安全和高效。一般来说,我们很少需要自己去编写一个ContentProvider,除非你是一个著名应用的开发者。但这并不意味着我们不应该学习如何编写。下面简单介绍一下ContentProvider的编写流程。

2016-09-21 22:36:28 2397

原创 Android Studio远程调用Service填坑指南

在安卓中不仅支持应用内Service绑定,还支持远程Service绑定。在eclipse中很方便就可以实现,但在Android Studio中有些不同,下面完整介绍在Android Studio中远程Service的编写和调用。  Service端AIDL接口的编写 在Eclipse中很简单,只需要先编写一个接口文件,然后把.java改成.aidl即可自动识别并解释出相应的

2016-09-20 13:01:29 1005

原创 安卓BroadcastReceiver总结

概述BroadcastReceiver是安卓中四大组件之一,用于接受广播通知。常用于监听系统的事件,比如:开机、锁屏、解锁屏、电量变化、网络变化、短信收发等。有时候还有收发自定义的广播的需求。  广播注册方式静态注册:在AndroidManifest.xml文件中配置 简单

2016-09-18 22:58:31 1203

原创 安卓Service绑定方式启动服务并调用服务中的方法

安卓的Service有两种启动方式,startService的方式非常简单,但相应的不能调用Service中的方法;而bindService的方式虽然复杂,但可以方便的调用Service中的方法。下面我们来介绍一下如何实现。 Service实现类要开启服务,首先需要创建一个Service类。下面是具体的Service实现类,看起来很多,但理解清楚后,发现还是很简单。pu

2016-09-18 22:53:06 2255

原创 安卓Service生命周期,你应该知道的都在这里

如有转载,请申明:转载至 http://blog.csdn.net/qq_35064774/article/details/52567004Service是安卓的四大组件之一。它是一个没有界面的组件,且优先级大于后台进程。了解它的生命周期很有必要。 Service启动的分类 启动服务: 通过startService启动的服务称为启动服务绑定启

2016-09-17 23:43:16 2141

原创 安卓进程优先级

平时使用安卓手机时,不知道你是否注意到,即便是按返回键退出了应用,打开加速球时,依旧可以看到应用还在运行,这其实就是安卓进程的策略。 安卓进程分类 前台进程:获得焦点的进程,可与用户进行交互。可视进程:当前可以看见的进程,但不是前台进程。比如,当前面那个进程的Activity部分透明或全部透明时,其后面的Activity就能看见了,但并没有得到焦点,不能进行交互。服务进程:

2016-09-17 19:42:25 803

原创 安卓Activity启动模式特点和应用场景

安卓的Activity有四种启动模式,分别是standard、singleTop、singleTask、singleInstance。不同的启动模式有不同的特点和应用场景,下面我们简单来介绍一下。慢着,差点忘了,介绍这个之前,应该先介绍一下任务栈(已经了解的直接看下面)。 任务栈 安卓中的Activity都是保存Task Stack的容器中,任务栈特点是后进先出(类似于

2016-09-16 20:44:27 914

原创 安卓Activity生命周期全解析

Activity是安卓中的四大组件之一,因此它的生命周期就显得比较重要。下面这张图是经典的安卓Activity生命周期图。(握cao,怎么这么多? 我开始方了) 生命周期图 调用时间 onCreate: Activity创建的时候调用。onStart: Activity显示时调用。onResume: Activity获得焦点时调用。onPause

2016-09-16 19:28:42 587

原创 设计模式之状态模式

1 什么是状态模式状态模式允许一个对象在其内部状态改变时改变其行为。从外界看起来就像类改变了一样。通俗说来,就是内部状态不同,行为不同。 比如,作为人来说,高兴状态和难过状态,做同一件事的效果可能不一样。 2 如何实现状态模式首先还是以一个问题作为入口。  * 现有一个机器人,他有三种状态:高兴、平静、难过 * 他有say和work方法 * 高兴的时候会

2016-08-04 19:21:37 379

原创 设计模式之装饰模式

1 什么是装饰模式 装饰模式又名包装模式。装饰模式对客户端透明方式扩展对象的功能,是继承关系的一个替代方案。 通俗来说,就是包装一个对象,让其拥有更强的功能。  2 如何实现装饰模式 同样我们举个简单的例子。  * 现需要一个发票打印程序 * 一张发票可以分成三个部分:头部、主体、尾部 * 要求打印的发票格式如下: *  * *** XX

2016-08-04 19:16:50 354

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

1 什么是责任链 责任链模式是一种对象的行为模式。在责任链模式中,很多对象由每一个对象对其下家的引用而接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。 举个简单的

2016-08-03 12:22:00 512

原创 设计模式之原始模型模式

1 什么是原始模型模式 原始模型模式属于对象的构建模式。通过给出一个原型对象来指明所要创建的对象的类型,然后复制这个原型对象的办法创建出更多同类型的对象。 通俗来说,就是通过存在的对象创建出n份相同的对象,也就是对象拷贝。而java对这模式有很好的支持,有克隆接口。  2 如何实现原始模型模式 对于对象拷贝来说,存在两种,一种是浅拷贝,一种是深拷贝。两者唯一

2016-08-03 12:16:25 856

原创 设计模式之享元模式

1 什么是享元模式 享元模式是对象的结构模式。享元模式以共享的方式高效地支持大量的细粒度对象。享元对象能做到共享的关键是区分内蕴状态外蕴状态。内蕴状态是存储在享元对象内部的,不会随着环境而改变,所以是可以共享的。外蕴状态是随环境改变而改变的,所以不可共享。  2 如何实现享元模式 同样我们举个简单的例子。  * 加载图片是非常消耗资源的操作 *

2016-08-02 18:58:54 337

原创 设计模式之调停者模式

1 什么是调停者模式 调停者模式包装了一系列对象相互作用的方式,使得这些对象不必互相明显引用。从而使它们可以松散的耦合。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证了这些相互作用可以彼此独立地变化。 简单来说就是许多对象之间关系错综复杂,如果让这些对象直接联系的话,复杂度和耦合度很高。这时候专门设立一个调停者,让所有对象只喝调

2016-08-02 18:53:50 733

原创 设计模式之模版方法模式

1 什么是模版方法模式 模版方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模版方法模式的用意。  2 如何实现模版方法模式我们以一个简单的问题入手。  * 写代码累的时候,总想喝点什么,可能咖啡、可乐、

2016-08-01 22:05:55 291

原创 设计模式之建造模式

1 什么是建造模式 建造模式是对象的创建模式。建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。 2 如何实现建造模式 先从一个小问题入手。  * 假设电脑由主板、CPU、内存、硬盘和显卡组成 * 为了组装一台电脑,我们需要先装主板,然后装CPU、内存、硬盘、显卡 * 请你设计几个类来描述这一创

2016-08-01 22:01:57 597

原创 设计模式之合成模式

1 什么是合成模式 合成模式属于对象的结构模式。合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式可以使客户端将单纯元素与复合元素同等看待。 这定义看着太抽象了,我们举个栗子。在二维图形中,线、圆、矩形等都可以看作是图形,而通过简单图形组合起来的图形也可以看作图形。  2 如何实现合成模式 合成模式可分为安全式和透明式。 简单说来就

2016-07-31 19:10:26 626

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

1 什么是观察者模式 观察者模式是对象的行为模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有的观察者对象,使它们能够自动更新自己。 这个定义也有些抽象,简单来说,就是类似于订阅报纸系统,每当报社有新闻时,就会给订阅的用户推送。  2 如何实现观察者模式同样以一个简单的问题作为入口。

2016-07-31 19:07:00 314

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

1 什么是访问者模式 访问者模式是对象的行为模式。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这种操作需要修改的话,接受这个操作的数据结构则可以保持不变。  2 如何实现访问者模式同样以一个简单的问题入手。  * 某公司有很多员工,作为老总,你可能会想知道一些他们的信息,比如每个人的月薪、年假时间、日工作时长等 很明显这个问题中数据结构相

2016-07-30 22:35:31 285

原创 设计模式之不变模式

1 什么是不变模式 一个对象的状态在对象被创建后就不再变化,这就是不变模式。  2 如何实现不变模式不变模式可分为强不变模式和弱不变模式,区别就是弱不变模式中,其子类对象的状态可以变化。 不变模式很简单。 只要达成以下条件,就可以认为是强不变模式。 * 不变类中没有方法修改对象的状态。 * 不变类中所有属性都为私有。 * 不变类中引用的其他对象

2016-07-30 22:33:39 450

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

1 什么是备忘录模式 备忘录模式又叫做快照模式或Token模式,是对象的行为模式。备忘录对象是一个用来存储另一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。 2 如何实现备忘录模式同样为了容易理解,我们以一个简单问题为入口。  * 假设你正在开发

2016-07-29 20:17:02 305

空空如也

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

TA关注的人

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