- 博客(34)
- 资源 (2)
- 收藏
- 关注
原创 跨平台基础网络框架Mars初探
前言对于新派单通知、订单时效变更通知等需要及时反馈给用户的消息,目前点我达骑手的解决方案是定时轮询并通过http请求的方式主动从服务器获取变更,这种方式存在一定的缺陷,如http方式轮询流量消耗较高、消息通知不及时等。随着订单量和活跃用户量的急剧增加,这种轮询方式的弊端也逐渐显现出来,需要一种能够及时发送消息且流量消耗较低、弱网环境表现优异的方案替代现有轮询方案,那就是Socket长连接的方式...
2018-02-23 16:43:27
1904
原创 属性动画在Android自定义View中的应用场景
Android中动画的类型,按照系统版本可以简单的分为两大类型,一种是传统的动画,也就是Android中最常用的View动画,即帧动画和补间动画;另一种是Android3.0以后支持的PropertyAnimation,即属性动画。这两大类型的动画虽然在实现一些动画效果上有异曲同工之处,但实现方式和使用场景还是有较大的差别。View动画帧动画和补间动画是安卓中最常见的动画,表现形式有AlphaAni
2017-09-30 13:47:05
864
原创 使用IntentService解决点我达骑手APP消息提醒机制中的优先级排序问题
最新版的点我达骑手APP对新订单消息提醒、订单信息被修改、新的可抢订单等声音及制动提醒做出了规范和优化,加入了消息提醒(包括声音及振动提醒)优先级机制,即在优先级较高的声音在播放过程中有优先级较低的声音插入播放队列,则忽略优先级较低的声音不进行播放;优先级较低的声音在播放过程中有优先级较高的声音插入播放队列,则在优先级较低的声音播放结束后再对插入的优先级较高的声音进行播放。本文从如何更安全高效的执行
2016-11-01 16:56:10
2390
原创 Android中的线程池ThreadPoolExecutor
提到线程池就必须先说一下使用线程池的好处:1.重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销;2.能有效控制线程池的最大并发数,避免大量的线程之间因相互抢占系统资源而导致的阻塞现象;3.能够对线程进行简单的管理,并提供定时执行以及制定事件间隔循环执行等功能。Android中的线程池的概念来源于Java中的Executor,Executor是一个接口,真正的线程池的实现为Thre
2016-06-10 13:11:14
762
原创 Android中两种序列化方式的比较Serializable和Parcelable
Serializable和Parcelable接口可以完成对象的序列化过程,当我们需要通过Intent和Binder传输数据时就需要使用者两种序列化方式。还有,我们需要对象持久化到存储设备或者通过网络传输给其他客户端,这个使用也需要使用Serializale来完成对象的序列化。在Android应用开发中,这两种方式都很常见,但两者方式并不相同。1.Serializable接口Serializable
2016-05-08 13:33:55
21485
原创 读书笔记—View的工作原理
View的工作原理1.ViewRootViewRoot对应于ViewRootImpl类,它是链接WindowManager和DecorView的纽带,View的三大流程(measure/layout/draw)均是通过ViewRoot来完成的。在ActivityThread中,当Activity对应被创建完毕后,会将DecorView添加到Window中,同时会创建ViewRootImpl对象,
2016-04-20 15:34:38
390
原创 读书笔记—View的滑动冲突
View的滑动冲突常见的滑动冲突常见1.外部滑动方向和内部滑动方向不一致。2.外部滑动方向和内部滑动方向一致。3.上面两种情况的嵌套滑动冲突的解决方式1.外部拦截法 所谓外部拦截法是指点击事件都先经过父容器的拦截处理,如果父容器需要此事件就拦截,如果不需要则不拦截此事件。外部拦截法需要重写父容器的onInterceptTouchEvent方法,在内部做响应的拦截即可。伪代码如下:pub
2016-04-16 14:57:32
465
原创 读书笔记—View的事件体系(1)
View的事件体系View基本知识1.View的位置由四个定点决定,分别是top/right/bottom/left,且这些坐标的位置都是相对于View的父容器来说的(相对坐标)。2.View的宽高width=right-left;height=bottom-top;3.MotionEvent常用点击事件类型1.ACTION_DOWN2.ACTION_MOVE3.ACTION_UP4.A
2016-04-13 19:14:03
523
原创 读书笔记—Activity的生命周期和启动模式
第一章 Activity的生命周期和启动模式Activity的生命周期1.生命周期对应关系onCreate-onDestroy:创建-销毁onStart-onStop:可见-不可见onResume-onPause:可交互-不可交互2.如果Activity设置了透明主题,则不会调用onStop3.Activity启动过程简介:启动Activity的请求会由Instrumentation处理,然后它
2016-04-12 19:32:32
561
原创 支持Html渲染的TextView—LinkTextView
需求场景是这样的: 在Android中实现如下效果: 很多人都会说:So easy!交给h5去做,It’s not my bussiness!好吧,我也好想说一句:H5你去做吧,It’s not my bussiness! 然并卵,产品需求说要做Android源生的,然后苦逼的事情就此开始了……然后,思想步入正轨,开始思考这个需求的实现方式: 1.一个TextView控件,通过Spann
2016-03-20 11:28:44
1343
原创 Android事件分发机制源码剖析(2)—顶层View对点击事件的分发过程
点击事件到达顶层View(一般是一个ViewGroup)以后,会调用ViewGroup的dispatchTouchEvent方法,然后逻辑是这样的:如果顶层ViewGroup拦截事件,即onInterceptTouchEvent返回true,则事件交由ViewGroup处理,这时如果ViewGroup的mOnTouchListener被设置,则onTouch会被调用,否则onTouchEvent会被
2016-03-13 15:39:00
616
3
原创 Android事件分发机制源码剖析(1)——Activity对点击事件的分发过程
点击事件用MotionEvent表示,当一个点击操作发生时,事件最先传递给当前的Activity,由Activity得dispatchTouchEvent来进行事件派发,具体的工作由Activity内部的Window来完成。Window会将事件传递给DecorView,DecorView一般就是当前页面的顶层容器(即setContentView所设置的View的父容器),通过Acitivty#get
2016-03-13 14:28:55
658
原创 Android自定义控件—仿仪表盘进度控件ArcProgressBar
开门见山,效果图如下: 这种效果经常会遇到,但却一直不知道这个效果图应该怎么描述,所以暂且以“仪表盘进度控件”来描述,各位博友如果有更好的描述这种效果的词汇,请回复博文告诉我,在此先谢谢各位博友了!其实做出这样的效果并不困难,只需要了解自定义控件的常规步骤,Canvas绘图操作,外加一点点数学基础就行了,因为在绘制控件的过程中,需要计算一些坐标点和圆弧位置等信息。为了更加方便的使用该控件,该控件支
2016-03-02 11:56:34
6672
原创 你所不知道的Activity启动模式
我们知道,在默认情况下,当我们多次启动同一个Activity的时候,会发现这些Activity会一一回退。任务栈是一种”先进后出”的栈结构,每
2016-02-28 17:23:41
533
翻译 Android中View的事件分发机制
见过太多的讲解View事件分发机制的博客和文章,绝大多数都是从源码层次讲解,枯燥乏味又让初学者望而生畏,而且不方便记忆。 今天在月的任玉刚先生的《Android开发艺术探索》一书中的有关View的事件分发机制章节,伪代码的讲解形式顿时让人对”View的事件分发机制”有醍醐灌顶之神效,故将该章节的内容摘抄给大家供参考。1.点击事件的传递规则 所谓的点击事件的事件分发,其实就是对MotionEven
2016-01-24 17:18:11
554
原创 Android自定义控件实现圆形进度CircleProgressBar
近日有朋友问我有没有如下图效果的开源控件,相信大家无论是用IOS还是Android,都对这种效果不陌生,很多主流APP都会有这样或类似的效果,之前也打算研究一下这类控件的代码,苦于一直不知道应该怎么搜索这种效果(就是关键词)或者所搜的结果不是自己想要的,所以就一直搁置了下来。 正好朋友需要这种效果,所以就忙里偷闲写了一个类似的、更加常见和适用范围更多的控件,效果如下图所示:自定义上图所示效果的控件
2016-01-07 22:24:20
7722
1
原创 Intellij IDEA配置Android Annotations注解框架
Intellij IDEA配置Android Annotations注解框架作为安卓开发人员应该对Android Annotations注解框架并不陌生,使用该框架中的注解,可以极大的简化我们开发过程中的不得不做但又毫无营养的工作,如findViewById,setOnClickListener等等。Annotations框架绝对是拯救安卓开发人员的福音和救世主,呵呵呵呵~~~NB就吹到这里,进入正
2015-11-07 15:59:00
3257
原创 【安卓-动画】使用ObjectAnimator实现ArcMenu动画效果
使用ObjectAnimator实现ArcMenu动画效果ObjectAnimator是Google3.0+系统提供的另一套动画框架,相比于原始的Animation动画框架,ObjectAnimator(属性动画)更灵活、方便且效率更高。使用普通的Animation框架,如果我们需要实现一个ImageView的移动效果,可以使用TranslateAnimation很轻松的”实现”,这里所说的实现是指
2015-11-05 20:08:30
844
1
原创 Html、CSS、DOM、JavaScript
一、 HTML1、Html HyperText Markup Language2、html标签就是用来封装的3、规范中要求所有标签都要结束4、操作思想:为了操作数据,都需要对数据进行不同标签的封装,通过标签中的属性对封装的数据进行操作。标签就相当于一个容器。对容器中的数据进行操作,就是在再不断的改变容器的属性值。5、双引和单引相互嵌套6、转义
2014-07-09 23:44:28
734
原创 Java反射机制
1、反射机制:对一个类进行动态的获取并创建对象,并调用该类中的内容。2、应用程序1.在不明白日后出现什么样的实现类时,可以扩展出去,对外提供配置文件,让后期的实现类都定义在配置文件中。2.该程序中会读取配置文件并根据指定的名字找寻具体对应的类。3.对找到的类进行对象的建立。4.并调用该类对象的成员。是不是在动态的获取指定的类,是!是不是在调用类中的成
2014-07-09 23:41:23
382
原创 正则表达式
1、 正则表达式:就是用操作字符串数据的规则表达式。规则:就是用一些符号组成,每个符号都代表着特有的含义。其实这些符号相当于对应着底层一段代码。对外提供符号就是简化了操作。弊端:必须要先学习这些符号。符号多了,阅读性会较差。 实例演示: public class RegexDemo { public static void main(String[] args) {
2014-07-09 23:40:12
467
原创 网络编程
1、 网络编程的三要素:IP地址:InetAddress、端口号、传输协议要实现网络通讯:1. 找到对方 IP2. 数据要发送到对方指定的应用程序上。为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识,为了方便称呼这个数字,叫做端口。指的是逻辑端口3. 定义通讯规则,这个规则称为协议。国际组织了通用协议TCP/IP。2、 IP地址:InetAddres
2014-07-09 23:35:39
459
原创 Java异常处理
1、 异常处理理解:在Java中,提供了错误捕捉和处理机制,即异常处理机制。在程序运行过程中发生错误时,Java允许其不按照正常路径完成任务,由发现错误的方法抛出封装了错误信息的对象(异常)到其调用程序,发出已经发生问题的信号,然后立即推出;而且,程序并不在调用该方法的代码处继续执行,而是由异常处理机制开始搜索一个能够处理这种特定错误情况的异常处理器。或者手动的去处理出现的异常,达到让程序正常
2014-07-09 23:31:47
476
原创 IO流
1、 IO(Input Output)流:IO流用来处理设备之间的数据传输 在读写字符串时,如果在构造时,传入第二个参数为true,将原有文件末尾进行读写 close()和flush()的区别? a.调用flush,可以将数据刷到目的地中,流依然存在,可以继续使用, 调用close,可以将数据刷到目的地中,流已被关
2014-07-09 23:30:24
408
原创 集合框架知识点
1、 Collection 集合 集合类的特点 集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。 iterator 迭代器 取出集合中的元素 两个常用子类: a. List b. Set2、List 序列 a. 有序的; 存入的顺
2014-07-09 23:28:27
642
原创 Java编程基础
一、基础知识:1.软件开发:软件:一系列按照特定顺序组织的计算机数据和指令的集合常见的系统软件:DOS(磁盘操作系统)、windows、Linux常见的应用软件:扫雷、迅雷、QQ等开发:制作软件 2.人机交互:交互方式:①图形化界面(GUI,Graphical User Interface),这种方式简单直观易操作 ②命令行方式(CLI,Com
2014-07-09 23:11:42
437
原创 Java中复制文件的两种方式
package IOProj;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public
2014-04-22 16:17:08
10492
原创 Java中线程的安全问题
假设我们现在要用代码实现这个场景:售票处共有100张票,同时开设4个窗口同时售票,知道票售完为止我们暂且将这种场景想象成线程的实现过程:四个线程同时售票,直到售完为止使用Java API文档中线程使用的第一种方法,我们定义一个继承了Thread类的类Ticket,并重写run方法:class Ticket extends Thread{private static int
2014-04-16 15:46:08
833
原创 类的单继承和多实现的原因
接口的出现和使用更加体现了Java语言的面向对象特征,它不同于抽象类一个类只能继承一个父类,但却可以实现多个接口,为什么会是这样?现在我们假设一个类可以继承多个多个类,代码如下://父类1public class Father1{public void show(){System.out.println("父类1中的show方法");}}//父类2p
2014-04-16 14:59:42
3258
原创 Java中构造函数、构造代码块、静态代码块等的执行顺序问题
//验证一个有父类的java对象的初始化顺序class InitFu{ public static String staticFuField = "父类静态变量"; public String field="父类成员变量"; public int f; static{ System.out.println(staticFuFie
2014-04-16 14:41:12
566
原创 Java中final关键字的使用方法
final是java中的一个关键字,可以用来修饰变量、方法和类。用关键词final修饰的域成为最终域。用关键词final修饰的变量一旦赋值,就不能改变,也称为修饰的标识为常量。如果一个类的域被关键字final所修饰,它的取值在程序的整个执行过程中将不会改变。假如说整个类都是final,就表明自己不希望从这个类继承,或者不答应其他任何人采取这种操作。换言之,出于这样或那样的原因,我们的类肯定不需
2014-04-16 14:35:46
1154
原创 Java中内部类的使用
/*内部类:嵌套类 将类定义在另一个类的内部,内部的类就称为内部类 内部类可以直接访问外部类中的成员 外部类要访问内部类中的成员,必须要创建内部类的对象*/class Outer{ static int num=3; //内部类:定义在成员位置上,它就相当于外部类的成员一样
2014-04-16 14:33:35
451
原创 Java中多线程的多生产多消费问题的解决方案
/*创建线程的第二种方式1、实现Runnable接口2、覆盖run方法3、通过Thread类创建线程对象4、将Runnable接口的子类对象作为实参传递给Thread类中的构造函数5、调用start方法开启线程,并运行Runnable接口的run方法第二种实现Runnable接口创建线程的思想:将线程任务和线程对象进行解耦,将线程任务单独封装成对象。另外,实现Runnable接口可以避免单继承的局
2014-04-16 14:31:31
1514
Android 圆形颜色渐变进度条 自定义控件
2016-01-23
高仿网易安卓客户端
2014-10-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人