- 博客(131)
- 资源 (2)
- 收藏
- 关注
原创 IntentService与HandlerThread的工作原理(个人笔记)
IntentService与HandlerThreadIntentService为什么需要IntentServiceIntentService如何实现HandlerThread是什么?总结IntentServiceIntentService是Service的一个子类,为Android开发者提供了一个方便的在工作线程中执行的Service。为什么需要IntentService1.Servic...
2020-02-01 14:52:13
440
原创 仿Keep自定义控件(个人记录)
文章目录效果第一种模式:CENTER_TO_RIGHT mode第二种模式:CENTER_TO_LEFT mode第三种模式:LEFT第四种模式:RIGHT代码片段联系方式 : 15910220851 邮箱:343191616@qq.com效果我为贵方实现了4种模式第一种模式:CENTER_TO_RIGHT mode第二种模式:CENTER_TO_LEFT mode第三种模式:LEF...
2018-12-18 14:58:51
8233
2
原创 Android Studio编写Gradle插件时遇到的坑 Unable to load class 'XXX.XXX'
文章目录前言为什么会产生问题?如何解决前言很久以前使用写了一款Gradle插件为项目使用,但是使用Intellij idea写的,然后最近在复习写gradle插件,就在Android Studo里面写了,本人用的是2.2.3的Android Studio 一直没有换3.0,因为公司的电脑配置太辣鸡了,换了更不好用,太卡了。但是按照网上的教程,折腾了一天也不成功,一直报找不到插件的实现类,但是最...
2018-11-29 17:12:32
21084
6
原创 Android自定义图表库(一):圆形进度图
导航效果预览自定义View第一步:确认View的大小自定义View第二步:绘制内容总结效果预览自定义View第一步:确认View的大小无论是自定义一个View还是ViewGroup我们必须得先为其制定在不同MeasureSpecMode下的大小,我这里就不讲解什么绘制源码了什么的,我们就直接实战。我们在onMeasure中需要调用setMeasuredDimension(width,he...
2018-11-13 11:21:36
1809
3
转载 markdown编辑器的使用
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...
2018-11-13 10:00:34
349
原创 Android自定义图表库:前言
文章目录前言饼状图玫瑰图进度圆形图柱状图折线图前言网上的图表库说多也多 说少也少,但是我个人感觉很大的缺点就是,一个图表的文档太少,使用复杂,我个人的项目中一直使用的最古老的那个开源图表库AChartEngine,但是问题及其多,而且使用及其不方便,按照网上的资料设置相关的属性,却总是得到想要的效果,图表显示的时候,也会有各种重叠的现象,当时想换一个其他的图表库,比如MPAndroidChar...
2018-11-09 11:37:49
428
原创 Android Handler消息机制中的诸多疑问
前言网上总是有很多阐述Android消息机制的文章,基本上大同小异,都是讲Handle,Message,Looper,MessageQueue这四个类会如何协同工作的。但是动脑筋的童鞋们可能总是会有如下的一些疑问,我翻阅了数多微博,很多年了,也没有看到相关比较完整的解释,所以这些天自己深刻阅读了一下源码,并且为自己解答了心中一直存在的疑惑,记录在此,希望也能帮助有同样疑问的小伙伴。文章目录前言...
2018-11-07 17:34:33
418
1
转载 android java.lang.NoSuchFieldError: R$id.xxx
第一种情况 参考自http://www.shangxueba.com/jingyan/1856083.html 将引用的自定义控件的xml文件中的最外层布局上面添加xmlns:sat=“http://schemas.Android.com/apk/res/控件所在位置的包名”可是在运行时就会报java.l...
2018-10-09 10:36:19
635
原创 一篇文章讲清楚Gradle与Gradle Wrapper的区别
Gradle:android用来构建项目的编程框架。这个玩意对于使用AS开发的,大家都清楚,用这个来构建项目变得无比轻松和高可定制性,比如引入第三方依赖,发布到maven库,构建多渠道版本等等都变得非常轻松,所以对于使用Gradle,自然是没有任何异议了,但是大家经常会在自己的项目中没有看见gradle,疑惑Gradle在哪?反而,没找到gradle,却总是能看见一个叫gradle wrapper...
2018-07-17 17:51:18
40078
2
转载 Android studio terminal终端命令行显示不全,只显示左边一半
Android Studio的Terminal一直问题很多,比如说,你写命令执行任务,和查看任务输出,只显示左边的少半屏幕,剩下的既不换行,也不显示,就这样被硬生生截断了。。真是无语比如:看了这篇文章后,找到了解决方法https://blog.csdn.net/divaid/article/details/79198077...
2018-07-16 17:55:52
2626
转载 Android关于buildToolVersion与CompileSdkVersion的区别
转载自 https://www.cnblogs.com/bluestorm/p/6849082.html如下在AS的android project下,外部库中的第一个android.jar的版本,也就是 compileSdkVersion Android关于buildToolVersion与CompileSdkVersion的区别 http://blog.csdn.net/mooreliu/ar...
2018-07-16 16:00:48
633
原创 Android调取拍照和获取拍照后的照片
需要调取照相机拍照,但是又不想用第三方,自己去写的时候,却发现有很多坑。比如:1、拍完照后,如何获取照片?2、照片获取不到是什么原因?@ContentView(R.layout.activity_main)public class MainActivity extends BaseActivity { Uri saveUri; @Override protecte...
2018-03-23 15:13:53
4663
2
转载 Android在部分手机上调用完相机之后,取不到uri 并且本activity的所有变量都为null的现象
一般情况下,我们大部分情况是通过传递uri的方式来调用系统相机的:Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);mTakePhotoUri = FileUtils.getOutputMediaFileUri(FileUtils.MEDIA_TYPE_IMAGE);intent.putExtra(Media
2018-02-06 16:09:14
619
原创 设计模式-访问者模式
定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。落实到代码就是: 有一个类族A(继承与同一抽象类或者父类),它们各自的实现类之间又有许多不同的操作,或者也得考虑增加新的操作,有一个族群B将要访问A中许多对象,并且对不同类型的对象进行的操作不同,那么我们为了避免代码耦合以及变动引起的代码污染,就通过定义一个访问接口,来访问族群A,
2017-03-27 11:41:33
416
原创 设计模式-原型模式
原型模式:通过拷贝原型实例,来创建一个新的此种类型的对象。简单点说就是,通过一个对象实例,创建一个“一摸一样” 的对象实例,但是与原对象是两个不同的对象实例。那一摸一样作何解释?因为拷贝又分为浅拷贝和深拷贝,而一摸一样只是所表现出的形式,而实质却有所不同。浅拷贝:对于非引用类型属性拷贝一副,对于引用类型属性指向原对象的地址。深拷贝: 引用类型属性也拷贝一份。我们
2017-03-24 17:52:41
377
原创 Android复习-事件分发机制(个人笔记)
一、Activity,Window,View我们在View里面接收到的MotionEvent是哪里来的?事件由系统先传递给Activity的dispatchTouchEvent方法,然后再通过window对象传递给decorView,decorView会最终传递给我们设置的布局里。如何向下传递?假设我们设置的顶级view是一个ViewGroup,那么事件会由Activity传递给D
2017-03-23 16:35:00
535
原创 Android复习-fragment声明周期与Activity生命周期(个人笔记)
Fragment生命周期(笔记):onAttach onCreateonCreateView:onViewCreatedonStartonReume:onPause:onStoponDestoryViewonDestoryonDetchfragment的生命周期与Activity绑定的,但是又不能统一而说,比如用fragmentManager
2017-03-20 11:13:52
1073
原创 java再复习-常用线程池
ThreadPoolExecutor只是java对线程池最原始的实现,java还提供了不同特性的封装好的线程池来供我们使用。Executors工具类提供了一系列静态工厂方法来帮助我们创建不同特性的线程池。1、FixedThreadPool: Executor executor = Executors.newFixedThreadPool(3);这是一种线程数量固定的线程池,它的线程都
2017-03-14 15:17:15
392
原创 java再复习-线程池
线程池:涉及到池的概念,肯定是为了重复利用资源,避免资源的重复创建,以及方便统一管理,线程池也不例外,可以避免频繁的创建线程和销毁线程带来的性能消耗,也可以对线程的并发数以及行为等进行一个统一的管理。java中有一个Executor接口,它就是线程池的顶层接口,而真正的实现是ThreadPoolExecutor。ThreadPoolExecutor的使用:public clas
2017-03-14 12:50:59
374
原创 Android复习-intent-filter匹配规则
隐式启动Activity,需要为这个Activity提供一组intent-filter进行匹配,这种隐式启动的方式往往用于启动别的App的一个Activity组件:为一个Activity指定一组intent-filter:
2017-03-14 10:51:22
480
原创 Android复习-任务栈与Activity启动标记(使用标记启动Activity时的坑)
总结一下:这些标记单独使用,只有clearTop是起作用的,其余的不起作用。然后我就试了一下上面在service中组合使用的情况下,发现使用Service中的组合情况是有效果的,并且和Service中的效果是一样的。有人可能会说为什么在Service中就要使用组合呢,因为Service启动Activity必须得加上FLAG_ACTIVITY_NEW_TASK,所以实验的使用实验其他三种标志也必须与这个标记组合。所以,一般情况下不要依赖使用标记,这个产生的效果不是很好。请在配置文件中配置。
2017-03-13 17:35:51
941
原创 Android复习-Acitivity的启动模式
所谓启动模式就是配置文件中的这个属性: <activity android:name=".Main3Activity" android:launchMode="standard"> launchMode属性用来标识Activity的启动模式,不行的话默认为standard。一共有四种:在介绍这四种模式之前首先的明确一个任务栈的概念,
2017-03-13 15:41:27
389
原创 Android复习-Acitivity的生命周期(二、异常情况下的各种回调)
首先来明确一下何为异常情况:Acitivty被异常杀死,例如Activity在后台时由于内存不足或一键清理引起的杀死,或者Acitivty的配置发生变化时,例如横屏转为竖屏。这些情况都会导致Activity执行“死亡”流程,并且再执行创建流程。进入一个Activity:A...onCreateA...onStartA...onResume然后进行横屏:03-13 11
2017-03-13 11:51:44
453
原创 Android复习-Acitivity的生命周期(一、正常情况下的各种回调)
Activity七大生命周期总结(源自Android艺术开发与探索):onCreate:表示Activity正在被创建,这个时候需要做一些初始化工作,例如加载布局资源,初始化数据。onStart :表示Activity正在被启动,即将被启动,这时的Activity已经可见了,但是在后台,无法与我们进行交互,并且对于我们而言,是不可见的。onResume: 表示Activity已经可见,
2017-03-13 10:53:35
738
原创 java再复习-Future与Callable的使用
Future总是与Callable绑着使用的。callable接口:相当于Runnable,但是被线程执行后可以提供返回值。future接口:用来保存Callable的返回值的。所以他俩是结合使用的Future常用子类:FutureTask,一个保存Callable接口返回值的任务,使用:public class FutureAndCallableDemo { publ
2017-03-11 14:16:18
403
原创 java再复习-CyclicBarrier的使用
CyclicBarrier:译为路障,给它一个初始值(一般为线程的个数),然后这些线程分别去干自己的事,然后干完之后汇合,汇合完之后再去各种去干自己的事,看例子:public class CyclicBarrierDemo2 { /** * 第一个参数:需要等到几个(与CountDownLatch正好相反,countDounwLatch是需要消耗几个) * 第二个参数:当数值达到时
2017-03-11 13:12:07
285
原创 java再复习-Exchanger的使用
Exchanger:使用两个线程间交换数据,阻塞的等待。例子:public class ExchangerDemo2 { public static void main(String[] args) throws Exception { final Exchanger exchanger = new Exchanger<>(); new Thread(){ publ
2017-03-11 12:16:07
356
原创 java再复习-Semaphere的使用
Semaphere:翻译为信号灯,其实就是提供一个值,用来限制并发访问量的,如果大于他的这个值,则会阻塞,小于的话可以进行执行,看例子:public class SemaphoreDemo2 { /** * 建立信号灯类 * 第一个参数为:并发数 * 第二个参数为:是否公平,默认为false,也就是一个参数的构造函数时就默认为false, * 那么何为是否公平呢? 如果设置
2017-03-11 11:58:47
483
原创 java再复习-CountDownLatch的使用与实际应用(Android)
CountDownLatch相当于一个多线程的计数器,可以不用关注数的同步,来定义一个数值去等待做一些事情,看例子:public class CountDownDemo2 { /** * 初始化一个CountDownLatch,次数为3 */ public static CountDownLatch countDownLatch = new CountDownLatch(3);
2017-03-11 11:32:21
547
原创 java再复习-ThreadLocal的使用
JDK1.5以后提供了许多方便的关于线程的类,比如ThreadLocal,一个可以在线程范围内共享数据的类:使用:public class ThreadLocalDemo2 { public static ThreadLocal threadLocal = new ThreadLocal<>(); public static void main(String[] args) {
2017-03-11 11:17:05
298
原创 设计模式-状态模式
状态模式:当一个对象 的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。简单点说:一个对象的功能根据它内部状态而表现出不同的行为。举一个反例,用遥控器来举例,遥控器在电视开的情况下和电视没开的情况下,同样的按键会表现出不同的结果。普通的编程方式:public class TeleController { /** * 开机状态 */ public stati
2017-03-10 17:40:53
305
原创 设计模式-模板方法模式
模板方法:定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使的子类可以不可以一个算法的结构即可重定该算法的某些特定步骤。简单点说:有一组流程要执行,流程中只有一个步骤是未知的,它前后的其余步骤都是固定的,我们就将这一步骤延迟到具体的子类去实现,以达到通用代码的抽象封装。假设有一个考试的父类:/** * 考试 * @author PC * */public abstrac
2017-03-10 16:41:11
216
原创 设计模式-外观模式
外观模式:提供一个统一的接口,用来访问子系统内部的一系列接口。其实简单点说:有一个复杂的系统,它有许多功能依赖与其他的子系统,让这个复杂的系统对外提供统一接口,对子系统的依赖与逻辑操作封装在内部去完成。就是简单的封装而已。举一个手机的例子,例子来源-Android源码设计模式实践与实战。定义系统顶层接口:/** * 手机 * @author PC * */public i
2017-03-10 15:56:42
255
原创 设计模式-适配器模式
适配器模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。示例:定义目标接口(真正所期待的功能):/** * 电脑充电接口 * @author PC * */public interface ComputerPower { /** * 需要5V * @return */ int getPower(
2017-03-10 12:34:19
312
原创 设计模式-策略模式(结合JDK源码)
策略模式:定义了一系列算法族,并将每一个算法封装起来,而且使他们可以互相替换。策略模式让算法独立于使用它的客户而独立变化。问题:假设我们有一个类,提供为List排序功能,分别有选择使用快速排序,冒泡排序。我们常使用的最普通的实现方式:/** * 排序工具类 * @author PC * */public class SortUtil { /** * 快速排序 */
2017-03-10 11:06:56
703
原创 设计模式-观察者模式,以及如何使用观察者来为app实现即时通讯功能
观察者模式:定义对象间一种一对多的依赖关系。使的每当一个对象状态改变,则所有依赖它的对象都会得到通知。使用场景:微信公众号,即时通讯中的消息收发等等。现在用一个做即时通讯的用到最主要的一部分来举例,对于消息的接收。定义被观察者接口:/** * 消息被观察者 * @author PC * */public interface MessageReceiver { /**
2017-03-09 13:01:47
366
原创 设计模式-装饰者模式
装饰者模式定义:动态的为一个对象增加额外的功能。what?啥意思。。? 其实还是遵循那个原则,对修改关闭,对扩展开放。如果要给一个类增加额外的功能,不要去修改他的代码,而是通过其他类持有它的引用,在功能前后增加所要增加的功能即可。看程序设计,java的流体系就是用装饰者模式设计的,我们自己也来设计一套流。顶层接口:/** * 输入流顶层接口 * @author Ade-ru
2017-03-09 10:43:32
283
原创 设计模式-命令模式
命令模式:将一个请求或者命令封装成一个对象,从而让用户将客户端请求参数化。对请求排队,或者记录日志,以及支持撤销动作。每次看任何定义都是云里雾里╮(╯▽╰)╭。其实我觉得这个模式就是将要进行的请求封装成对象,为什么要封装成对象?因为这个请求可能不是一个动作能完成的,再者就是这个请求需要依赖与另外的功能类去实现,如果代码直接耦合的持有另一功能类的引用去操作实现功能,会使的代码耦合度比较高,而且不
2017-03-08 18:28:11
211
原创 java再复习——异常总结
异常体系:Throwable顶层接口:Error:错误体系,发生这种错误,代表发生了不可挽回的错误,JVM会直接停止运行,并不提供任何可处理机制,只打印相关错误信息。Exception:异常体系,发生这种异常,相当于生病,有的可处理,有的不可处理,但是都是只是“病”,没有致命的问题,可以解决。RuntimeException:作为Exception的子类,RuntimeExcept
2017-03-08 10:58:58
264
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人