自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

凌晨安的博客

不是看到希望才坚持,是只有坚持才能看到希望

  • 博客(48)
  • 资源 (1)
  • 收藏
  • 关注

原创 服务网关组件Zuul

1.Zuul网关我们使用Spring Cloud Netflix中的Eureka实现了服务注册中心以及服务注册与发现;而服务间通过Ribbon或Feign实现服务的消费以及均衡负载;通过Spring Cloud Config实现了应用多环境的外部化配置以及版本管理。为了使得服务集群更为健壮,使用Hystrix的融断机制来避免在微服务架构中个别服务出现异常时引起的故障蔓延。在该架构中,我们的服务...

2019-12-16 15:37:30 399

原创 服务调用组件Feign

1.Feign使用了Ribbon的负载均衡功能,大大简化了远程调用时的代码:String baseUrl = "http://user-service/user/";User user = this.restTemplate.getForObject(baseUrl + id, User.class)你可能以后需要编写类似的大量重复代码,格式基本相同,无非参数不一样。有没有更优雅的方式,来...

2019-12-16 15:27:00 225

原创 熔断器Hystix的使用与原理

1.1.简介Hystix,即熔断器。主页:https://github.com/Netflix/Hystrix/Hystix是Netflix开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败。1.2.熔断器的工作机制:正常工作的情况下,客户端请求调用服务API接口:当有服务出现异常时,直接进行失败回滚,服务降级处理:当服务繁忙时,如果服务出现异常,不是...

2019-12-16 15:16:56 521

原创 负载均衡组件Robbin

1.负载均衡RobbinEureka中已经帮我们集成了负载均衡组件:Ribbon,简单修改代码即可使用。什么是Ribbon:接下来,我们就来使用Ribbon实现负载均衡。1.1.启动两个服务实例首先我们启动两个user-service实例,一个8081,一个8082。Eureka监控面板:1.2.开启负载均衡因为Eureka中已经集成了Ribbon,所以我们无需引入新的依赖。...

2019-12-16 15:09:29 464

原创 服务发现组件Eureka的使用与原理

1.初识SpringCloud微服务是一种架构方式,最终肯定需要技术架构去实施。微服务的实现方式很多,但是最火的莫过于Spring Cloud了。为什么?后台硬:作为Spring家族的一员,有整个Spring全家桶靠山,背景十分强大。技术强:Spring作为Java领域的前辈,可以说是功力深厚。有强力的技术团队支撑,一般人还真比不了群众基础好:可以说大多数程序员的成长都伴随着Sprin...

2019-12-16 14:36:13 276

原创 服务架构的演化

引言:随着互联网的发展,网站应用的规模不断扩大。需求的激增,带来的是技术上的压力。系统架构也因此也不断的演进、升级、迭代。从单一应用,到垂直拆分,到分布式服务,到SOA,以及现在火热的微服务架构,还有在Google带领下来势汹涌的Service Mesh。1.1. 集中式架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问...

2019-12-16 14:06:46 349

原创 SpringBoot中使用Thymeleaf

1.Thymeleaf快速入门SpringBoot并不推荐使用jsp,但是支持一些模板引擎技术:以前大家用的比较多的是Freemarker,但是我们今天的主角是Thymeleaf!1.1.为什么是Thymeleaf?简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较与其他的模板引擎,它有如下三个极吸引人的特点:...

2019-12-16 12:00:40 328

原创 SpringBoot整合SpringMVC

虽然默认配置已经可以使用SpringMVC了,不过我们有时候需要进行自定义配置。1.1.1.修改端口查看SpringBoot的全局属性可知,端口通过以下方式配置:# 映射端口server.port=80重启服务后测试:1.1.2.访问静态资源现在,我们的项目是一个jar工程,那么就没有webapp,我们的静态资源该放哪里呢?回顾我们上面看的源码,有一个叫做ResourcePro...

2019-12-16 11:52:30 4084

原创 SpringBoot配置文件

1.1 SpringBoot配置文件类型1.1.1 SpringBoot配置文件类型和作用SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。SpringBoot默认会从Resources目录下加载applicat...

2019-12-16 11:38:50 100

原创 springBoot原理分析

1.1 起步依赖原理分析1.1.1 分析spring-boot-starter-parent按住Ctrl点击pom.xml中的spring-boot-starter-parent,跳转到了spring-boot-starter-parent的pom.xml,xml配置如下(只摘抄了部分重点配置):<parent> <groupId>org.springframew...

2019-12-16 11:30:20 106

原创 SpringBoot创建工程

一、SpringBoot简介1.1 原有Spring优缺点分析1.1.1 Spring的优点分析Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品。无需开发重量级的Enterprise JavaBean(EJB),Spring为企业级Java开发提供了一种相对简单的方法,通过依赖注入和面向切面编程,用简单的Java对象(Pla...

2019-12-16 11:20:20 144

原创 使用Toolbar过程中的几个坑

使用Toolbar过程中的几个坑一 、Toolbar的样式二、和DrawerLayout结合使用时,设置NavigationIcon不起作用三、Toolbar设置了Menu,但是不显示四、menu菜单中,图片不显示五、Toolbar的基本使用在堕落沉沦了快2年之后,我又开始坚持学习了,什么感情乱七八糟的都是shit,只有自己强了,才有资格去追逐别的东西,不然怎么都没用,前端了解了一点点,后端了...

2019-05-09 16:45:48 528

原创 数据库框架Litepal极简教程

一:初始化①在gradle脚本中添加依赖dependencies { compile 'org.litepal.android:core:1.4.1'}②:在main-->assets中新建litepal.xml文件xml version="1.0" encoding="utf-8"?>litepal> dbnamevalue="demo" /> ver

2017-12-05 10:56:40 499

原创 Retrofit2极简教程

注:使用之前先依赖retrofit(compile'com.squareup.retrofit2:retrofit:2.1.0'compile'com.squareup.retrofit2:converter-gson:2.1.0'),定义好接口后,先进行初始化,以下是代码,所有请求的方法最好写在一个接口中retrofit= newRetrofit.Buil

2017-12-04 12:00:00 238

原创 24岁的一点点体会

最内耗的事情就是交浅言深,负能量可以保持在心里,自己去消化,不能将它吐露出来。一来没有人有义务要去消化你的负能量,二来,负能量其实是某个时刻最真实的想法,说得多了就等于完全将自己暴露在空气中了,人总是要留给自己百分之30的神秘感的,当被人看透之后,相当于在别人的眼里你就被定型了,很难去改变,这个时候人家对你的一切态度都是理所应当的了。人家可以对你不礼貌,甚至对你人身攻击,在对方眼里,你就配得上这样

2017-10-28 01:31:29 297 1

原创 Error: …… ,Manifest merger failed with multiple 解决方案

从Eclipese导入工程报了这个错,多方查找解决方案,终于找到一种靠谱的,并记录下来。这时候要看你的清单文件哪里写错了。点击清单文件左下角的Merged Manifest,可查看具体的错误。 查看具体的错误,然后修改,最后ReBuild一下就解决问题了。

2017-10-07 11:00:05 313

原创 沉浸式的封装(状态栏和底部导航同时实现)

我在使用沉浸式的时候遇到很多坑,最典型的就是兼容性问题,有的效果5.0以上很容易实现,但在4.4使用同样的方法就不可取了,有的机型底部有虚拟导航按钮,有的却没有,所有我们不仅要区分手机的版本,也要区分底部是否有导航栏。只有在4.4及以上才有沉浸式这么一说的,在本次封装中,我们要同时实现顶部状态栏和底部导航栏的沉浸式,需要的童鞋可以当做工具类,直接copy到自己的BaseActivity中进行使用。

2017-08-29 20:09:16 2070

原创 TabLayout的简单使用

一:导入design,appcompat包在gradle文件中引入design包,引入之后才可在布局中引入这个控件dependencies { ..... compile 'com.android.support:appcompat-v7:24.2.1' compile 'com.android.support:design:24.2.1' compile 'com.a

2017-08-28 17:36:01 320

原创 Palette的简单使用

Palette实际就是一个调色板,用来分析图片的颜色特征,如柔和的,鲜艳的,等等,可用来分析图片的色彩特征,这样可以用来保证应用颜色的统一。使用之前先要在gradle中进行配置dependencies { ... compile 'com.android.support:appcompat-v7:21.0.3' compile 'com.android.support:pa

2017-08-24 11:38:01 1119

原创 TextInputLayout的使用

TextInputLayout是具有meteria design效果的编剧框,使用起来效果会比普通的EditText更加漂亮。基本使用就是在TextInputLayout里面放置一个EditText即可,注意它只接受一个子view那就是EditText,布局文件如下:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android

2017-08-22 18:03:51 443

原创 Snackbar的基本使用

Snackbar实际是基于Toast和对话框之间的一种产物,一方面可以起到提醒作用,另一方面可以进行交互,比如微信收藏东西的时候,屏幕下方会弹出Snackbar,并且可以点击告来对该收藏添加标签。一、使用Snackbar使用之前先要在moudle的gradle脚本中配置dependencies { ........ compile 'com.android.support:appco

2017-08-22 11:16:15 620

原创 侧滑菜单(二)NavigationView的简单使用

上一次我们使用了DrawerLayout来实现侧滑,http://blog.csdn.net/sinat_35159441/article/details/77249450,现在我们在上次的基础上,使用DrawerLayout结合NavigationView来实现侧滑菜单。先看效果: 步骤如下:一:在gradle中进行配置因为NavigationView是design包下的,所有我们要在grad

2017-08-21 11:58:19 380

原创 侧滑菜单(一)DrawerLayout的使用

最早我们实现侧滑菜单是用的SlideMenu这个开源库,后来谷歌出了一系列的侧滑的控件如DrawerLayout,后来又对这个控件做了些封装,变成了NavigationView,我们今天先看下DrawerLayout的基本使用。相对来讲是比较简单的。一: 布局文件在写布局文件之前我们先分析一下,侧滑菜单是有几部分组成的,显然是有两部分组成的,一个是可以侧滑出来的菜单,另一个是内容。我们只要保证内

2017-08-16 16:19:37 332

原创 反射的基本使用

在使用之前我们先想一下反射的作用,网上各种解读比较多,我认为反射的作用就是,当无法直接使用一个类的属性,构造器,方法时,我们通过反射来实现,反射可以获得一个类的所有信息。比如你想调用某个API,但是这个API在源码里用了@hide来标注,这时我们就用反射间接的来使用这个API。使用反射有两个大的步骤,一是获取该类对应的字节码文件,即Class对象,二是获取该类的信息,即属性,方法,构造器。当然除了

2017-08-09 20:15:40 234

原创 Toolbar结合SearchView的使用

在实际的业务开发中,我们通常会在顶部的导航栏加入搜索的功能,如微信顶部的导航栏,这时我们可以Toolbar结合SearchView来使用Toolbar的具体使用见:http://blog.csdn.net/sinat_35159441/article/details/76794117 使用步骤如下:一:如何在Toolbar中假如SearchView使用Toolbar的时候,我们经常要跟menu打

2017-08-07 18:11:25 5030

原创 实现沉浸式的三种方式

首先说一下我对沉浸式状态栏的理解,在4.4之前,状态栏都是黑乎乎的,看起来很不美观,在4.4之后可以将状态栏设置成透明并和标题栏同一种颜色。以下是我总结的实现沉浸式的几种方式。第一种方式:使用系统API实现沉浸式1.1、首先看布局文件添加android:fitsSystemWindows=”true”, android:clipToPadding=”true”两个属性<?xml version="

2017-08-07 14:38:03 2669

原创 Toolbar的使用(一)

在5.0之前谷歌规范了顶部导航—ActionBar(3.0API,也有兼容包) 后来:ActionBar开发起来很蛋疼(1.用来比较费劲;2.扩展性太差 太死板),后来对ActionBar改了改就有了Toolbar,现在为了符合Meterial Design,又进化成了Appbar,这个我之后再说。Toolbar的使用步骤如下,这里只是简单用一下,更多用法可查阅文档。我们先看最终的效果:

2017-08-06 20:47:07 683

原创 Android6.0运行时权限浅析

Android在6.0之后加入了运行时权限,权限分为一般权限和危险权限,Android系统总共有百余种权限,那么怎么区分哪些是一般权限哪些是危险权限呢,其实危险权限并不是很多,总共9组24个,这里,这里是按组分的,只要申请了某一组的其中一个权限,那么就拥有了整组的权限。一:哪些是危险权限下图是所有的危险权限,共9组24个 二:具体使用2.1、检查权限 int result = Activity

2017-08-05 10:08:59 211

原创 Xutils3使用全解析

初始化及注解:x.Ext.init(this);//是否开启log,开启后将影响性能x.Ext.setDebug(true);注解的使用:①//绑定空间及布局文件@ContentView(R.layout.activity_main)public classMainActivity extendsAppCompatActivity {@ViewInj

2017-08-05 09:40:45 914

原创 Dagger2中@dependencies和@Subcomponent以及懒加载的使用

一、dependencies的使用 顾名思义,就是依赖,如果Acomponent想使用别的Bcomponent管理的实例,那么就可以直接让Acomponent去依赖Bcomponent,就能直接使用B所管理的实例了,例子如下:1.1:建立实体类,并创建它的module和componentpublic class Food { public void eatFood(){

2017-08-04 09:31:18 770

原创 dagger2的配置及基本使用(一)

一、配置:1.1 在Project的gradle脚本中配置 dependencies { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' }1.2在Module的gradle脚本中配置apply plugin: 'com.neenbedankt.android-apt'dependencies {ap

2017-08-01 15:48:34 1057

原创 使用ButterKnife时的配置

ButterKnife使用方法很简单,但是之前对配置不是很熟悉,没使用成功过,看了刘望舒写的Android进阶之光,还是比较详细的,把使用的配置记录一下,以免后面再踩坑。一:在project的gradle中配置“` dependencies { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'}“`二:在mo

2017-08-01 11:37:33 170

原创 进程保活-双进程守护的正确姿势

做车机的开发免不了在后台开很多服务,做车机的APP跟做普通的手机APP区别在于做车机要用到很多的进程间的通信交互等,一个应用死了,可能导致整个机器都运转不正常了,不会进程间的通信怎么可以,撸起来!双进程守护,肯定得用到多进程,一个应用可以有多个进程的,如何实现多进程呢,service或者activity等都有一个属性android:process,只要设置起名称就可指定该组件运行在该进程中。在这里

2017-07-17 20:05:26 1292

原创 Android studio使用JNI全解析(二)

上一篇文章中我们介绍了如何使用JNI,包括环境配置,如何编译C代码变成so库,java如何来调等,那么每次我们要使用C代码时都要在Android工程中编写C代码吗?当然不是,我们只需要使用最终的产物,so库就可以了,我认为使用NDK就只有一个作用,就是把so库生产出来。那么这一篇我们就着重介绍如何使用so库。一:相应配置1.1 在工程的main 目录下新建jniLibs目录,注意这里java和j

2017-05-29 20:01:31 320

原创 Android Studio下的JNI使用全解析(一)

一:创建工程1.1 创建新的工程时勾选上Include c++ support,然后一路next 勾选的目的是为了写C代码时有代码提示1.2 创建完毕之后修改CMake你要生成的so库的名称 1.3 把Src/main/cpp文件夹下默认生成的c文件删除,并把MainActivity中默认生成与JNI有关的代码删除,然后Build->clean Project二:环境配置2.1 在lo

2017-05-25 12:22:57 393

原创 Gradle签名打包

一:生成签名步骤如下: 点击build->Generate Signed APK 再选择一个新的签名,路径最好是当前项目的根目录 点击OK,稍等片刻,就会在你指定的位置生成一个签名文件,后缀名为.jks使用gradle自动签名打包步骤如下: 打开项目结构面板,可点击File–>Project Structure,也可点击工具栏对应的图标,都可以打开 打开后,选择对应的module,选择

2017-05-12 15:43:27 1788

原创 Gradle自定义项目结构

一:项目如何实现eclipse和Android studio的兼容 在Android开发中,很多老项目都是使用eclipse开发的,但为了开发的便捷性,我们要使用Android studio,问题来了,一个项目如何兼容Android studio和eclipse?Gradle的基本项目结构起始于main,我们只要在gradle脚本中具体指定各个资源的路径就可以了,比如java文件,资源文件,清

2017-05-12 10:45:33 1130

原创 Gradle初探

一:Project和Module中的gradle脚本的基本格式一:project的gradle脚本如下:buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.3' // NOTE

2017-05-11 23:15:06 169

原创 CarRecorder源码解析二(循环录像分析)

循环录像的整体逻辑比较简单,但代码还是比较复杂的,逻辑是刚开机就开始循环录像,每两分钟通过MediaRecorder录制一段视频,当视频所占内存卡的大小到达某一个预设的值时,开始自动删除最老的视频。## 一:如何实现开始结束开始的逻辑的?循环录像的入口在surfaceView的生命周期onCreate中 当surfaceView创建的时候,初始化VideoRecorder,在此时开始循环录像。

2017-05-10 16:12:18 1508 1

原创 Android studio使用技巧(二:国际化以及代码重构)

一:如何在Android中快速实现国际化 Android中的国际化实际是string.xml文件的国际化,我们来看看具体的实现过程:1.1 . 打开 res->values->string.xml文件1.2 . 点击右上角的Open Editor 1.3 .在Editor的编辑区,点击左上角的地球符号,选择一个语言,这时就会在res文件夹下生成对应的国际化values 文件夹了 二:

2017-05-01 01:03:39 1480

Android Gradle用户指南

Gradle脚本在Android中的使用

2017-05-12

空空如也

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

TA关注的人

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