自定义博客皮肤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)
  • 收藏
  • 关注

原创 MVC MVP MVVP Android端构建个人总结

黑发不知勤学早,白首方悔读书迟。MVCMVC (Model-View-Controller, 模型-视图-控制器)Trygve Reenskaug在1978年提出(维基百科):模型(Model) - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。 视图(View) - 界面设计人员进行图形界面设计。 控制器(Controller)- 负责转发请求,对请求进行处理。君生我未生,永不过时的经典软件架构模式。对应于Android开..

2021-01-15 19:18:49 286 2

原创 Sonatype Nexus Repository Manager 3.+版本 上传aar、jar

引Android做组件化,项目aar包需要上传到Maven仓库,项目之间还存在互相依赖的情况。网上找了很多:通过AS直接配置gradle,直接在build上传,不适用互相依赖的情况,或许是还有其他的配置;直接通过Sonatype Nexus上传,也有问题,几乎都是2.+版本的搜索结果,界面的改动相当大,所以做个简单的笔记。正1.直接上传单个文件进入某个仓库,点击upload component进入上传页面:上传成功后文件的目录结构大致如下:2通过pom文件上传我这里是为了

2020-11-04 14:59:57 2362

原创 jar文件内部包名编辑

引将项目做为模块嵌入到别人的系统,发现jar文件包名冲突,双方改动比较麻烦,就直接通过修改.jar文件的包名的方式解决了。工具下载地址:google jar工具下载实现:将下载的工具jarjar-1.4.jar和要替换的xx.jar放在一个目录。 该目录下新建rule.txt 内容:rule com.android_print_sdk.** com.aiyin_print_sdk.@1 运控控制台输入: java -jar jarjar-1.4.jar process rule.t.

2020-11-03 18:28:10 221

原创 Databinding使用·记

韶华不为少年留,恨悠悠,几时休。基础用法:1. gradle 配置支持dataBinding// gradle 支持dataBindingandroid{/.../dataBinding { enabled = true;}}2. 选中根目录 alt+回车 生成对应格式,简单的绑定。3. 实现绑定:dataBean extends BaseObservable 配合notifyChange()和notifyPropertyC...

2020-11-03 11:47:42 462

原创 Android Studio优雅的看源码

正常情况看源码:下载了默认就可以看了,不做赘述。看源码出现了问题,下载了看不到?1.找到AS安装目录 AndroidStudio3.1 -> options -> jdk.table.xml 打开修改对应数据:但是28的源码始终看不了,不知道为什么。。。。。其他版本没问题。类报红,看不到hide类https://github.com/anggrayudi...

2019-03-14 18:29:57 708

原创 MVP+Retrofit+Rxjava+Dagger2 Architecture

地址https://github.com/meybeBlank/FengArchitecture前言Android做了两三年,每次都是用的别人的架构,中途也抽时间看过项目的框架的东西,一知半解,虎头蛇尾。自己没有从0到1的过程,能力没法引起质变,始终还是半吊子,年初打定主意把热门的Retrofit之类全都系统的亲手敲一遍。由经历了找工作遇到坑,再找工作安定下来的一言难尽,最后弄完已经到...

2019-01-28 15:16:03 248

原创 Android 7.0+ 文件权限 相机调用问题

 情景Android 24之后,加强了文件访问权限控制,调用相机、图片裁剪等情况就会报错。之前遇到过懒得记,再次遇到简单记一下。处理1.Manifests文件注册<application> <provider android:name="android.support.v4.content.FileProvider"...

2018-12-19 16:38:48 1335

原创 Dagger-android 量身定做的Dagger

目录0. 为什么定制?1. 2.10版本复杂的方式1.0 导包1.1 依赖创建1.2 依赖注入1.3 让这一切被Dagger所知晓1.4 源码看了一下 结合 生成的代码2. 2.11版本@ContributesAndroidInjector0. 为什么定制?从 Dagger2入门 了解到,Dagger2的一个坑就是:Component inject(c...

2018-12-12 18:11:41 857

原创 Dagger2学习入门

 目录前置:几个明显的坑:三种常用的依赖注入方式:构造器注入:setter方法注入:接口注入: Dagger简单注入:1.依赖创建:构造方法提供依赖1.依赖创建:Module类提供依赖2.依赖注入位置:属性注入 User注入2.依赖注入位置:方法注入 User2注入3.让dagger知道从哪儿获取依赖,注入依赖到哪儿:构造方法提供依赖3....

2018-11-13 18:03:50 212

原创 RxJava学习指南

目录基础用法singleCompletableMaybeFlowable线程调度关键字createmapflatMap/concatMaptimerinterval/intervalRangezipconcat/mergedistinctfilterbufferskip/skipLasttake/takeLast...

2018-11-02 15:11:58 432

原创 Retrofit简单使用

目录一次简单完整的网络请求处理0.前置工作:添加依赖、权限    1.创建返回数据Model2.创建请求参数接口3.创建Retrofit对象,初始化配置4.获取网络请求实例,发送网络请求,并异步处理返回数据添加请求头拦截器 Interceptor 方式Retrofit 注解方式retrofit官方文档retrofit github非官方:OkHttp...

2018-10-30 16:50:22 558

原创 MVP简单架构

MVC --> MVP :将Activity的View和Controller双重职责分离,Activity单纯负责View逻辑,Presenter层处理Model和View层的所有逻辑,Model层处理纯数据。换言之,MVP类似于MVC++,解决分离不彻底的问题。同时MVP也有一些值得讨论的地方:Presenter层与View层是通过接口进行交互,接口粒度控制存在问题。粒度小...

2018-10-30 11:02:56 291

原创 并发编程

进程:运行在他自己的地址空间的自包容程序。线程:进程中的单一顺序控制流、子任务。daemon后台线程:非后台线程结束,杀死所有后台线程,并结束整个程序。 变量实例对象存于主存;每个线程私有一个工作内存,同时只能操作自身工作内存,不能访问其他线程的工作内存。由此引发,并发编程三个常见问题。 原子性一个操作或者多个操作,要么都执行,要么都不执行,且中途无法打断。可见...

2018-10-29 11:26:27 93

原创 APT 编译期处理注解

APT:Annotation Processing Tools。编译期处理注解工具。对源代码文件进行检测找出其中的Annotation,Annotation处理器在处理Annotation时可以根据源文件中的Annotation生成额外的源文件和其它的文件,APT还会编译生成的源文件和原来的源文件,将它们一起生成class文件。简单的说:不影响性能的情况下,自动生成代码。常用的Butt...

2018-10-26 15:29:56 621

原创 面向对象理解

1.万物皆对象编程实际是从现实问题建模转变为程序问题的一种具体实现,编程思想也脱胎于现实世界。 2.类-对象的统称,对象-类的具体实例类:具有相同特性的所有对象的抽象,如同:鸟类、人类对象:具体的某个类的实实在在存在的东西,如同:树上的那一只鸟,面前叫张三的人但类并不是具体的存在与实际空间中,是一个抽象的概念性名词。对应到程序中,类也并没有实际的存在于内存空间,真实存在...

2018-10-25 16:03:05 153

原创 常用命令合集

获取当前Activity信息adb shell "dumpsys window w | grep name="关联本地git到githubgit remote add origin http:xxxx删除远程仓库git remote rm origin

2018-09-18 11:31:50 155

原创 Java四种引用类型、RefrenceQueue简单理解

情景强引用 StrongRefrence软引用 SofrRefrence弱引用 WeakRefrence虚引用 PhantomRefrenceRefrenceQueueWeakHashMap情景处理Android内存泄漏的时候发现引用类型的使用,这里简单理解。强引用 StrongRefrence具有强引用的对象,永远不会被GC回收,Android常见...

2018-06-04 15:02:54 310

原创 Java GC简单理解

情景Java运行时内存划分程序计数器 Program Counter Register虚拟机栈 Java Stack本地方法栈 Native Method Stack堆区 Heap方法区Java内存分配机制年轻代 Young GenerationEdenSurvivor年老代 Old Generation永久代/方法区算法具体分析情景做...

2018-06-04 14:16:10 503

原创 Android内存泄漏测试、定位

工具使用导入LeakCanaryAS获取heap dump文件 hprofMAT分析内存泄漏原因工具Android Studio下载MAT(Memory Analyzer Tools)下载Leakcanary 项目地址使用导入LeakCanary在项目的gradle文件导入LeakCanary,具体操作见leakcanary当项目出现内存泄漏,通过LeakCanary定位具体的Act

2018-05-08 23:06:41 1001

原创 共享元素

情景效果使用情景推出“材料设计”同时5.0附带的“廉价”Android动画,让页面的跳转对用户更加指引性,也让页面的跳转通过“Shared Element”联系起来。效果使用一、跳转前的RecyclerView的item布局如下。 重点在:transitionName,后面的String全局唯一<?xml version="1.0" encoding="utf-8"?><LinearLayo

2018-05-07 22:51:31 1038

原创 启动页、沉浸式状态栏

情景效果使用启动页沉浸式状态栏情景启动页:简而言之,微信看地球的图片。用图片代替app初始化过程没有用户可见界面的白屏,使app更加“友好”。 沉浸式状态栏:或者称透明状态栏。将状态栏颜色与app颜色一致,使用户界面更加整体。效果使用启动页一、 为Activity设置Theme <activity android:name=".MainActivity" android:theme

2018-05-07 22:24:00 2029

原创 SlidingTabLayout:完全自定义Tab导航栏UI风格

情景效果使用导入使用Demo地址SlidingTabLayout源码SlidingTabStrip源码情景系统自带的Tablayout拓展性实在太差,但很多时候又需要对Tab进行类iOS风格的自定义,使用反射TabLayout无果之后选择了更简单的SlidingTabLayout。SlidingTabLayout,看到有说是官方的Component,但是在Api27找了半天没找到,不知

2018-05-03 18:11:43 11217

原创 SpannableString花式文本混排

情景效果SpanableStringsetSpanwhat 风格flags 延续范围效果所有代码情景使用一个TextView混排多种不同颜色、大小等风格。效果SpanableString这是文本的类,其内容是不可变的,但标记对象可以附加和分离。This is the class for text whose content is immutable but to which mark

2017-10-12 18:17:54 540

原创 软键盘弹出/缩回事件监听

情景特殊情况需要获得软键盘的弹出状态,进行特定的UI展示与隐藏。实现重写外层布局通过log打印,会发现每一次的弹出与缩回,外层布局会有多次的测量、布局的操作。这里在onMeasure()方法获取每次的测量状态。/** * 监听界面因为软键盘弹出/收起事件引起界面改变,增加界面改变监听事件。 * 换言之:监听软键盘的弹出/收起事件 * * @author fengzhen * @versio

2017-10-09 18:06:15 856

原创 ListView嵌套EditText处理

情景问题焦点丢失问题处理内容保存滑动冲突问题处理情景在ListView的一个或者多个Item中用到了EditText输入框控件,出现的一些常见问题优化处理。问题焦点丢失点击EditText,弹出软键盘,你会发现EditText的焦点丢失了,根本不能立刻进行输入。 问题出现的原因是弹出软键盘会导致重新进行ListView的绘制,此EditText非彼EditText。问题处理思路:将之

2017-10-09 17:50:14 804

原创 jdbc连接sqlserver数据库

1.下载连接引擎jar微软官方:https://www.microsoft.com/en-us/download/details.aspx?id=117742.载入引擎注意: 不同版本的引擎driver地址不一样static final String SQLSERVER_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// 初始化时调用

2017-09-13 17:28:35 6706

原创 java动态代理实现

情景实现JDK动态代理创建接口被代理类实现接口创建代理类结果cglib动态代理导包直接创建代理类结果情景需要在A类的a方法、B类的b方法等调用之前验证条件C,最直接的方法就是每个方法的前面都添加一个验证C的方法,但是当大量的方法需要验证,显然不利于维护。此时,可以用动态代理的方式处理验证方法。将需要验证的方法进行代理,即每次调用代理方法之前都去执行C方法进行验证。实现JDK动态代

2017-09-07 16:05:53 377

原创 ThreadLocal 线程本地变量

简介官方文档有道之后的结果。 该类提供线程本地变量。这些变量与一般的变量不同,每个线程访问一个线程(通过get或set方法)有自己独立的变量初始化副本。ThreadLocal实例通常是私有的静态字段在类希望关联状态的线程(例如,一个用户ID或交易ID)个人理解:通过set() 方法将变量实例申明到一个和线程绑定的单独空间,或者理解为使用key-value形式存储变量,线程为key,set的变量

2017-09-07 09:56:47 2556 1

原创 dao、po、vo等服务器对象解析

PO (persistent object):持久化对象。即数据库中的一条记录,只包含数据信息。VO (value object):值对象。用于返回给前端值,一般将po进行处理得到vo对象,vo中只保存需要用到的数据。DAO (data access object):数据访问对象。结合PO、VP对象,封装直接对数据库进行的操作,同时提供接口给业务处理对象操作数据库。BO (business obje

2017-09-06 17:26:58 1024

原创 JDom解析xml文件

情景jar包下载地址xml文件解析xml结果展示情景解析xml配置文件,将数据库列名和Bean的属性映射。jar包下载地址DOM:jdk自带 标准的xml解析方式,树形加载整个xml,不适合大文件。SAX:http://sourceforge.net/projects/sax/ 事件模型xml解析方式,不需要完全加载xml,相较性能更好。JD...

2017-09-06 17:01:44 442

原创 RecycleView简单使用

简介基本使用流程1.导包2.设置布局管理器3.设置Adapter4. 添加分割线5. 设置动画6.点击事件7.HeadView + FootView7.去掉滑动收尾的下拉动画复杂布局层数简化1. 布局要求2. 布局解析3. 布局实现4. 最终效果展示简介 A flexible view for providing a limited ...

2017-08-24 15:57:58 631

原创 Webview上传文件

情景实现重写WebChromeClient 方法处理选择返回值Webview上传文件没有反应情景需要在Webview中打开系统文件选择目录。即网页元素为: < input tyoe=”file” />,点击按钮应该打开系统的文件选择。实现1.重写WebChromeClient 方法在 Webview.setWebChromeClient() 方法传入的参数 WebChromeClient 重

2017-08-21 14:16:42 475

原创 更换APP启动图标和名称

情景效果展示实现在manifest文件为MainActivity创建别名获取ComponentName和PackageManager动态的配置启动图标简单的布局文件情景类似于双11等节日,实现app图标的动态更换效果展示手机比较慢,见谅-_-!!!实现1.在manifest文件为MainActivity创建别名这里将别名设置为不可用,到时候再使用。 <activity and

2017-08-01 17:16:02 2024 2

原创 ListView的单项刷新

情形不使用RecycleView,实现ListView的单项的刷新,而不去刷新整个列表。实现通过ListView.getChildAt()方法,获取到item的View,然后进行数据刷新。这里注意getChildAt()中的position是展示界面的位置,不是整个ListView的位置。 /** * 更新单个Item UI * * @param itemInde

2017-07-29 14:15:43 309

原创 Service基础

基本介绍使用方式Started 方式Bound 方式MyService运行线程IntentService进程间通信IPC基本介绍Service是一个应用程序组件,四大组件之一,它能够在后台执行一些耗时较长的操作,并且不提供用户界面。服务能被其它应用程序的组件启动,即使用户切换到另外的应用时还能保持后台运行。此外,应用程序组件还能与服务绑定,并与服务进行交互,甚至能进行进程间通信(IPC

2017-07-21 18:55:01 322

原创 UML序列图——时序图基本使用

简介基本元素角色对象生命线激活消息同步消息异步消息返回消息自关联消息组合选择组合替换组合其他一个简单例子简介序列图主要用来更直观的表现各个对象交互的时间顺序,将体现的重点放在 以时间为参照,各个对象发送、接收消息,处理消息,返回消息的 时间流程顺序,也称为时序图。基本元素角色系统角色,可以是人或者其他系统,子系统。 对象交互的主体,接受发送消息的主体,最基本的元素。

2017-07-19 20:48:56 89707 4

原创 WindowManager——悬浮在所有app之上

目标WindowManager效果实现目标类似于某鱼、某猫直播平台的悬浮窗功能,能够在APP切换到后台后进行播放直播。 是不是很酷炫? WindowManager很简单就能实现将一个View悬浮在系统上。WindowManagerWindowManaget是Android最重要的服务之一,WindowManager是全局唯一的。 其将View和屏幕联系起来,用户的交互操作也传递给它,作为桥

2017-07-14 19:11:09 5714 1

原创 ActivityLifecycleCallbacks——追踪Activity生命周期

目标之前使用全局广播 + BaseActivity + Activity栈中位置判断 实现全局数据接收、全局弹框。实在是有点儿low,后面请教高人,发现一个十分简单的方式对所有的Activity的生命周期进行监听,既节约了性能,也提升了B格。ActivityLifecycleCallbacks简介每个Activity生命周期的执行都会被此接口监听,可以通过注册此接口实现Activity生命周期的监

2017-07-13 10:48:15 718

原创 获取Activity栈,判断当前Activity位置

需求需要在整个app全局能够弹出弹框,接收到广播即进行处理。但是,BaseActivity派生出N个Activity,BaseActivity中的广播就会执行N次,导致弹框重复添加,所有在广播中判定,只有在栈顶的Activity才能处理广播消息。实现获取任务栈必须添加权限:<!--获取Activity任务栈 权限--><uses-permission android:name="android

2017-07-10 22:17:33 15136

原创 官方推荐的Dialog——DialogFragment

简介官方推荐使用的Dialog类型,继承自Fragment,通过FragmentManager管理对话弹框。由于继承自Fragment,使用dialog时完全可以将其看作Fragment。 使用DialogFragment需要实现onCreateView()、onCreateDialog()其中之一。 onCreateView即将完全自定义一个dialog。 onCreateDialog

2017-07-04 16:35:32 1568

空空如也

空空如也

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

TA关注的人

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