自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

安妍妍的博客

做一个优雅的程序媛

  • 博客(83)
  • 资源 (1)
  • 问答 (7)
  • 收藏
  • 关注

原创 java和kotlin实现单例模式

定义及使用场景定义:确保某个类只有一个实例,而且自行实例化提供给外部使用。使用场景:某个类型的对象实例应该有且只有一个,或者避免创建多个对象实例消耗过多的资源时。如:网络库,访问IO,数据库时要考虑单例模式。单例模式的实现方式1.饿汉式优点:简单,线程安全缺点:在类加载的时候就创建,不管需不需要都会创建,不能传参适用场景:单例的创建开销小java:public class HungrySingleton { //在类加载的时候创建单例 private static Hung

2020-08-24 10:13:49 526

原创 Android序列化

概念序列化:将数据结构或者对象转换成二进制数据的过程;反序列化:将二进制数据转换成数据结构或者对象的过程。应用场景1.网络传输2.进程间通讯(进程间传递数据)3.intent传输数据序列化方案Serializable空接口,起到标识作用,最简单的序列化方式serialVersionUID:控制版本,什么场景加?什么场景不加?readResolve等四个方法:单例序列化?@Transient:忽略字段静态变量不会被序列化,因为我们序列化的是对象实例吗,而静态变量是属于类的。序列

2020-08-11 16:07:17 226

原创 RxJava简单理解

响应式(流水线)核心思想引入简单使用防抖网络嵌套(串行&并行)

2020-07-28 10:31:56 304

原创 RecyclerView的ItemDecoration

RecyclerView怎么添加分割线?系统帮我们提供了ItemDecoration抽象类,继承该抽象类重写相应的方法即可。ItemDecoration 抽象类该类很简单,除去3个已经废弃的方法,只有三个方法,如下:我们来看以下这三个方法的作用:getItemOffset /** * @param outRect Rect to receive the output. * @param view The child view to decorate * @param pare

2020-07-22 15:11:23 441

原创 自定义流式布局FlowLayout

FlowLayoutFlowLayout是自定义ViewGroup,实现了流式布局,自动换行的功能,并且可以控制最大行数,设置水平间距,垂直间距和子View垂直居中。github地址效果图:使用方法:在布局中声明,并设置自定义属性: <com.ayy.flowlayout.FlowLayout android:id="@+id/flow_layout" android:layout_width="match_parent" androi

2020-07-04 16:03:56 572

原创 EventBus3.x的正确打开方式

EventBus的基本使用我就不介绍了,可以看GitHub地址。EventBus内部默认使用的是运行时反射,反射当然是影响性能的。为此EventBus3.0做出了优化,但是只升级EventBus版本并没有用到优化策略,需要我们加些代码才行。1.在gradle文件添加如下:android { defaultConfig { javaCompileOptions { annotationProcessorOptions { a

2020-06-26 13:03:59 246

原创 Glide图片加载方案

Glide

2020-06-13 13:49:23 1511 1

原创 js调用了app爆露的方法导致app闪退

场景app端使用webview加载网页,并提供了一个closeWeb方法给网页端调用。但是没想到,网页调用这个方法导致app闪退。原因分析大家知道,不管是Android还是IOS都只能在主线程中操作UI,如果在其它线程中操作UI会直接闪退。上述问题就是这个原因导致。原生提供的closeWeb方法里面有操作UI逻辑,而且没有主动把这部分逻辑放在主线程中,那js调用的时候,就是在当前调用线程中...

2020-03-08 15:00:34 1078

原创 Vue系列(九)之生命周期

生命周期Vue实例提供了生命周期供我们调用。所谓生命周期就是Vue实例从创建到销毁的过程。直接看代码注视吧:<script> var vm = new Vue({ el: '#app', data: { name: 'ayy' }, /** * 实例初始化之后 ...

2019-12-31 16:59:17 168 1

原创 Vue系列(八)之计算属性和侦听器

计算属性和侦听器计算属性侦听器模板内的表达式非常便利,但不适合复杂的逻辑,所以就有了计算属性。计算属性计算属性写在computed选项中。举一个简单的例子????:data中有firstName,lastName,都是响应式的,页面上显示全名(firstName + lastName)。<div id="app"> <input v-model="firstnam...

2019-12-31 15:06:08 113

原创 Vue系列(十一)之vue-cli脚手架创建项目

环境配置下载安装Node.js设置镜像简单的命令安装vue-cli脚手架创建项目为什么需要配置环境? 为了快速开发,我们不可能赤手空拳的下代码。使用Vue也是这样,Vue-CLI脚手架工具和webpack构建工具都是基于Node的。所以我们需要node环境下载安装Node.jsNode官网下载Node.jswindows需要配置环境变量,方法请自行百度。终端窗口输入:node -v查...

2019-12-31 11:20:44 305

原创 Vue系列(十)之小结

小结到这里,vue基础的使用就介绍完了,工作中基本的业务应该可以应对了。为了检验自己是否都已经吸收消化。本节不讲解新的知识点,而是留一个作业。实现一个简单的列表,效果如下图:(数据自己模拟)心图片有点击事件;如果你实现起来比较吃力,建议你不要接着往下进行,先把前面的基础知识掌握了再说。...

2019-12-30 22:13:54 115

原创 Vue系列(七)之常用指令逻辑指令

逻辑指令v-showv-if家族v-for今天主要介绍的是一些帮助我们实现判断、循环等逻辑的指令,暂且叫他们为逻辑指令吧。v-show切换元素的display属性<div v-show="show" class="box"></div>data: { show: true},检查元素:将data中的show改为false:data: { ...

2019-12-30 22:06:18 209

原创 Vue系列(六)之常用指令v-model

v-model

2019-12-30 21:18:55 1084

原创 Vue系列(五)之常用指令v-on

v-on指令缩写用法修饰符stopprevent其它缩写v-on指令的缩写为:@,通常缩写用的较多。用法v-on api参数是event事件,v-on:click或@click;v-on:change或@change等<button @click="click">click</button><select @change="change"> ...

2019-12-30 16:35:02 1349

原创 Vue系列(四)之常用指令v-bind

v-bind指令图片的srcclass和style字符串对象自定义组件prop为了避免篇幅过长,常用指令我可能会分几个篇幅来介绍。v-bind api缩写::v-bind指令主要是绑定元素的属性(比如图片的src,元素的class,style,id等)和自定义组件(后面会讲到)的prop。来看几个常见的使用场景:图片的src<div id="app"> &lt...

2019-12-30 14:55:47 303

原创 Vue系列(三)之基本语法文本插值

基本语法Vue实例插值普通文本原始html今天主要介绍Vue常见的语法,声明式渲染和常用的指令。Vue实例上篇文章中我们使用new关键字创建了一个Vue实例:<div id="app"> <div>messgae:{{message}}</div></div><script> var vm = new Vu...

2019-12-30 11:33:44 2152

原创 Vue系列(二)之简单demo

简单demo今天就写一个极简单的小案例,大家来感受一下Vue给开发带来的便捷。先看效果图:很简单,一个头像图片,一个姓名,一个年龄,这三个字段是模拟从网络请求得到的数据。先看使用原生js怎么实现:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> ...

2019-12-30 10:17:10 457

原创 Vue系列(一)之初识Vue

初始VueVue是什么?Vue优势Vue现在是越来越火了,作为前端开发的你,如果还不会使用Vue,那你就out了,今天就带大家来认识一下Vue。Vue是什么?那Vue究竟是何方神圣呢? 先来看下官网的介绍:Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架去掉修饰词,Vue就是一套框架,JS框架。与React.js,Angular.js一样,是...

2019-12-29 20:10:50 236

原创 AndroidStudio以debug模式启动app后找不到桌面图标了

AndroidStudio以debug模式启动app后找不到桌面图标了今天用AS启动了之前写的一个应用,退出应用后,竟然在桌面找不到启动图标了。这也太神奇了吧。我AS也没有升级,之前还是好好的,今天就有问题了。各种百度,网上说的方法都没能解决我的问题,一度怀疑我的手机出了问题。各种尝试后还是不行。最后我打了个realse包,安装后桌面图标出现了。现在确定不是代码的问题。将软件卸载后,重新de...

2019-04-09 16:29:54 3952 4

原创 自定义View之无限滑动周历

自定义View之无限滑动周历项目需要,自定义了一个可以无限左右滑动的显示一周的日历控件(产品的灵感来自苹果自带的日历上的某个控件)。废话不多说,上图:项目地址:https://github.com/anyanyan07/WeekView...

2018-11-27 18:08:16 648

原创 Intellij Idea搭建Spring Boot+MyBatis工程

Intellij Idea搭建Spring Boot+MyBatis工程由于公司业务需求和本人对学习的热爱,我从Android转Java了。做Java有很多框架要学,今天就记录一下使用Intellij Idea开发工具搭建Spring Boot工程吧。File-&gt;new-&gt;project创建新的项目:出现如下弹窗:选择Spring Initializr(Spring初始化...

2018-10-25 16:01:37 551

原创 Gradle配置方便快速切换生产和测试环境

实际开发项目时,肯定会遇到切换后台地址的情况。如果每次都去手动更改常量Url的值,虽然不是很麻烦,但是会烦有木有。实际开发项目时,肯定会遇到切换后台地址的情况。最简单的分为测试环境和生产环境,复杂一点的会有内网环境,外网环境,内网测试,外网测试,外网生产…,头都大了有木有。每次都要去手动更改url地址(手抖还有可能改错,酿成大祸),最讨厌的时,他们总会拿着手机问我他们手机上安装的是哪个...

2018-08-03 16:20:01 2435

原创 WebView中js交互时参数中含特殊字符及乱码的问题

WebView中js交互时参数中含特殊字符及乱码的问题 使用WebView一般会用到js交互,无非两种:1.后台调用客户端的方法(客户端写方法并使用@JavaScript注解改方法即可);2.客户端调用后台的方法(webView.loadUrl(“javascript:(’ “+param1+” ‘,’ “+param2+” ‘)”))。都比较简单。但是最近我觉在js交互上踩了2个大坑。特...

2018-07-25 21:29:19 3368

原创 ARouter路由框架不回调onActivityResult的问题

阿里巴巴的ARouter框架真的是好用,基本可以满足项目的跳转需求,而且使用简单,github地址:https://github.com/alibaba/ARouter但是我在使用的时候却遇到了一个问题,需求:需要调用navigation(Activity activity,int RequestCode)方法代替传统的StartActivityForResult方法,在onActivityRes...

2018-07-02 15:55:21 15232 5

原创 Android无线调试

一直以来都是用数据线连接手机进行调试的,但是近日华为赞助我们的一个pad m5,尼玛只给了pad,没给充电线,而且这个pad是要tipec的那种充电线,说充电线好买,让我们自己买一个。作为一个抠逼的程序员怎么可能自掏腰包买一个充电线,还不如给我一刀。于是就了解了一下无线调试。ps:只需要用一次充电线,后面就不再需要了(除了充电,第一次是我借的同事的)1:数据线连接手机和电脑;2:命令行输入adb ...

2018-06-04 11:53:54 18535 14

原创 自定义促销标签

项目需求,模仿淘宝商品促销标签,废话不多说,直接上图:实现比较简单,源码已上传,需要的同学下载即可:下载链接:LabelTextViewDemo

2018-05-23 14:23:23 446

原创 应用更新时apk包解析错误

bug场景:应用内升级下载apk完成后安装,6.0及以下的手机会报解析包错误,7.0及以上的手机是没问题的。开始以为是v1,v2签名问题导致的,但是我用浏览器下载下来的安装包是能够正确安装的。排除v1,v2签名的问题。研究半天终于发现问题所在:原来我把下载的apk文件放在了getCacheDir().getAbsolutePath()的目录下,而不是sd中,这就导致apk文件没有相应的权限,不能被...

2018-05-16 10:06:07 3782

原创 Android Studio查看完整日志

在调试项目的时候,结合日志信息可以快速的定位到问题。但是有时候,崩溃日志会被新的日志顶掉,一闪而过。这就比较尴尬了。这时我们可以将日志输出定位到文件中,就可以查看所有的日志文件了。再也不用担心崩溃日志被顶掉了。输入命令:adb logcat &gt; F:\log.txt日志就会保存在F盘下的log.txt文件中,打开查看即可。想退出按ctrl+C即可。...

2018-05-15 15:49:56 13186

转载 aapt 命令查看apk包名、主activity、版本等信息

在做APP自动话的时候,获取apk的包名、activity信息是最基础的

2018-04-04 15:27:30 957

转载 Please select Android SDK

Android Studio 报错Please select Android SDK

2018-03-28 13:46:12 756

原创 解决WebView视屏播放问题记录

情景项目中有一大板块是加载web页面,开始集成了腾讯的X5内核WebView(因为本身集成了视频播放功能,使用起来比较方便)。但是后来前端大神写了一个web页面用到了&lt;canvas&gt;标签,使用X5加载不出来该标签的内容,因为我们设置了webView关闭了硬件加速( webview.setLayerType(View.LAYER_TYPE_SOFTWARE,null)),今日仔细查看了X...

2018-03-13 13:00:40 4010

原创 Android调试技巧之模拟内存不足

Android开发中经常会遇到内存问题,如果测试人员的测试机比较低端的话,常常会遇到下面比较尴尬又无奈的情景:开发人员开发完成了一个功能并自测没有问题,交给测试,过了一会测试反馈说点击崩溃等一系列问题。尼玛开发在自己的手机上测试完全没有问题啊,无法重现测试所说的bug,于是屁颠屁颠的找测试MM理论,你他妈给我重现一下,我的手机上是好的。然而测试MM就当着开发的面重现了Bug.打脸啊。这种问题一般在...

2018-02-28 10:05:51 7949

原创 解决Android Studio配置完依赖等下载慢的问题

使用Android Studio在第一次导入项目或者配置完Kotlin后,会一直Build,因为需要下载一些项目中配置的依赖和gradle插件等,有的需要翻墙,由于国内的网络环境很容易超时。可以使用下面的方法解决的问题:使用阿里云的国内镜像仓库地址,就可以快速的下载需要的文件修改项目根目录下的文件buildscript { repositories { //加入...

2018-02-09 16:49:54 9566 4

原创 解决华为手机无法输出Debug级别log的问题

近期购入了新款的华为手机荣耀8,手感、性能、颜值都非常好。作为android开发工程师,自然会用到真机进行日常的调试。然而,这部手机并没有这么“听话“!反复尝试开启开发者选项中的设置项,依旧无法输出Log.d(), Log.v()等的日志信息!在华为手机的论坛里面找到篇帖子,说的是需要在“工程模式“里面开启ap的log。进入工程模式启动...

2018-02-09 16:14:20 1547

转载 Android Studio配置打包生成自定义文件名

Android Studio打包生成自定义名称的apk文件

2018-01-31 16:22:33 1891

原创 Handler机制-源码解析

Handler经常被用来实现线程间通信,使用也很简单,今天得空学习了Handler相关的源码,在此记录加深印象,同时也希望帮助到其他的小伙伴们。Handler的使用Handler的使用很简单,最常见的是在UI线程创建Handler对象,在其他子线程中调用handler.sendMessage()相关方法,从而实现线程间通信的目的。如下: private Handler handler

2018-01-29 14:28:03 396

原创 进程间通信学习系列(二)——简单了解Binder机制

进程间通信学习系列(一)——IPC简介Binder机制太复杂了,本文只是简单的对Binder进行了解。在Android中Binder是一个类,实现了IBinder接口,在Binder机制中还有两个重要角色Binder驱动(在内核中)和ServiceManager,这两部分Android平台已经实现,我们不必关心,当然有兴趣的童鞋可以研究下。本文主要学习了解应用层的Client和Se

2018-01-17 13:15:30 363

原创 进程间通信学习系列(一)——IPC简介

最近得空,打算学习研究一下进程间通信,主要参考任玉刚大神的《Android开发艺术探索》一书,并查阅相关博客。将自己的学习总结记录下来,方便自己,帮助他人。如有错误,还请指正。一、什么是IPC机制IPC : Inner-Process Communication,进程间的通信。IPC机制不是Android独有的,任何一个操作系统都有其对应的IPC机制。虽然Android是基于Linux内核

2018-01-16 21:05:19 340

转载 android ScrollView fillViewport属性

ScrollView的fillViewport属性

2018-01-12 09:53:17 497

LabelTextViewDemo

模仿京东淘宝等商城促销降价标签,自定义促销,降价等左上角或右上角标签

2018-05-23

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

TA关注的人

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