<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[robert的专栏]]></title><description><![CDATA[Android开发，java编程]]></description><link>https://blog.youkuaiyun.com/robertcpp</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; robertcpp]]></copyright><item><title><![CDATA[Android事件的产生和底层分发]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/99970589</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/99970589</guid><author>robertcpp</author><pubDate>Wed, 21 Aug 2019 16:09:32 +0800</pubDate><description><![CDATA[目录

事件的产生

系统分发

EventHub

InputReader

InputDispatcher

接收事件

事件的产生

当屏幕被触摸，Linux内核会将硬件产生的触摸事件包装为Event存到/dev/input/event[x]目录下。

可以通过命令监控event

adb shell getevent

androidSource/system/core/toolbox目录...]]></description><category></category></item><item><title><![CDATA[从代理模式到mockito原理]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/90033440</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/90033440</guid><author>robertcpp</author><pubDate>Thu, 09 May 2019 14:31:05 +0800</pubDate><description><![CDATA[代理模式回顾

代理模式的定义：代理模式给某一个对象提供一个代理对象，并由代理对象控制对原对象的引用。




	抽象角色Subject：通过接口或抽象类声明真实角色实现的业务方法。
	
	
	代理角色Proxy：实现抽象角色，是真实角色的代理，通过真实角色的业务逻辑方法来实现抽象方法，并可以附加自己的操作。
	
	
	真实角色RealSubject：实现抽象角色，定义真实角色所要实现的业务逻辑，...]]></description><category></category></item><item><title><![CDATA[lambda表达式介绍以及Android Studio引入lambda]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/54341128</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/54341128</guid><author>robertcpp</author><pubDate>Wed, 11 Jan 2017 10:52:15 +0800</pubDate><description><![CDATA[一、简介“Lambda 表达式”(lambda expression)是一个匿名函数，Lambda表达式基于数学中的λ演算得名，直接对应于其中的lambda抽象(lambda abstraction)，是一个匿名函数，即没有函数名的函数。Lambda表达式可以表示闭包。运算符将表达式分为两部分，左边指定输入参数，右边是lambda的主体。        lambda表达式：]]></description><category></category></item><item><title><![CDATA[Https简单介绍]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/54170513</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/54170513</guid><author>robertcpp</author><pubDate>Sat, 07 Jan 2017 10:25:20 +0800</pubDate><description><![CDATA[一、HTTPS是什么  HTTPS（全称：Hypertext Transfer Protocol over Secure Socket Layer），是以安全为目标的HTTP通道，简单讲是HTTP的安全版。即HTTP下加入SSL层，HTTPS的安全基础是SSL，因此加密的详细内容就需要SSL。 它是一个URI scheme（抽象标识符体系），句法类同http:体系。用于安全的HTTP数据传输。ht]]></description><category></category></item><item><title><![CDATA[移动设备无线投屏到电视机]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/52904453</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/52904453</guid><author>robertcpp</author><pubDate>Sun, 23 Oct 2016 21:31:37 +0800</pubDate><description><![CDATA[移动设备无线投屏到电视机主要有三种种技术：AirPlay、DLNA与Miracast技术。
DNLA，Digital Living Network Alliance，是索尼、英特尔、微软等发起的一套 PC、移动设备、消费电器之间互联互通的协议。它们的宗旨是“随时随地享受音乐、照片和视频”。
DLNA与苹果的AirPlay功能比较类似，协议也大体相同，他们都可以让你手机中的媒体内容投放到电视屏幕里。不同的是手机上的DLNA 并没有类似Apple TV的AirPlay 的镜像功能，也没有Apple TV 所支持]]></description><category></category></item><item><title><![CDATA[微信小程序]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/52709859</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/52709859</guid><author>robertcpp</author><pubDate>Fri, 30 Sep 2016 12:34:54 +0800</pubDate><description><![CDATA[微信小程序官方文档
https://mp.weixin.qq.com/debug/wxadoc/dev/
目前是内测阶段，大多数人没有收到内测邀请，无法获取小程序APPID，但是这并不影响我们开发，只是不能在手机上看效果， 只能在开发环境提供的调试器中看效果，访问一些敏感信息API受限。
官方文档内容还是挺全的。
看官方文档完全可以入门。]]></description><category></category></item><item><title><![CDATA[Android日志的使用技巧]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/52684138</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/52684138</guid><author>robertcpp</author><pubDate>Tue, 27 Sep 2016 20:21:36 +0800</pubDate><description><![CDATA[Android系统提供了logcat工具来记录打印log，先来聊一下logcat的使用adb logcat --helpUsage: logcat [options] [filterspecs]options include:  -s              Set default filter to silent.                  Like specifying filter]]></description><category></category></item><item><title><![CDATA[Android 的String资源格式化方法]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/51628631</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/51628631</guid><author>robertcpp</author><pubDate>Thu, 25 Aug 2016 09:27:49 +0800</pubDate><description><![CDATA[很多时候我们感性Google在设计Android时遵守了大量MVC架构方式，可以让写公共代码、美工和具体逻辑开发人员独立出来。有关Android 的资源文件values/strings.xml中如何实现格式化字符串呢?
    stringdemo
    hello robert
上面是一段简单的字符串资源文件，没有用到格式化，因为比较简单直接描述了意思，当我们设计一个类似 Delete]]></description><category></category></item><item><title><![CDATA[Realm使用简单介绍]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/52097087</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/52097087</guid><author>robertcpp</author><pubDate>Tue, 02 Aug 2016 20:42:57 +0800</pubDate><description><![CDATA[Realm是一个轻量级的数据库，在Android开发中，它可以替代 SQLite 和 ORM 框架。相比SQLite，Realm更快并且具有很多现代数据库的特性，比如支持JSON，流式api，数据变更通知，以及加密支持。
工程配置
1、在工程根目录的build.gradle中添加dependencies
 classpath "io.realm:realm-gradle-plugin:1.1.0"
2、在app的build.gradle中添加plugin
apply plugin: 'realm-andro]]></description><category></category></item><item><title><![CDATA[SQLite清空表并将自增列归零]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/51628809</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/51628809</guid><author>robertcpp</author><pubDate>Wed, 20 Jul 2016 22:12:15 +0800</pubDate><description><![CDATA[SQL标准中有TRUNCATE TABLE语句，用来清空表的所有内容。但SQLite不支持这个语句。在SQLite中直接使用“DELETE FROM TableName”就可以了。对于大多数DBMS来说，用DELETE不如用TRUNCATE 速度快，因为TRUNCATE 不用访问整个表，不用记录数据的变动。
SQLite虽然不支持TRUNCATE，但它对DELETE做了优化：“When the WHERE is omitted from a DELETE statement and the table be]]></description><category></category></item><item><title><![CDATA[JAVA并发编程（四）任务的取消与关闭]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/51921459</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/51921459</guid><author>robertcpp</author><pubDate>Sat, 16 Jul 2016 00:00:10 +0800</pubDate><description><![CDATA[使用简单标志位保存取消状态
为了保证标志位可靠，标志必须为volatile类型。
使用标志位来取消任务是不及时的，如果中间调用了阻塞方法，有可能永远都无法结束。
每个线程都有一个boolean类型的中断状态，interrupt方法能中断目标线程，而isInterrupted方法能返回目标线程的中断状态，静态的interrupted方法将清除当前线程的中断状态，也是清除中断状态的唯一一个方法。
在线上Java程序中经常遇到进程程挂掉，一些状态没有正确的保存下来，这时候就需要在JVM关掉的时候执行一些清理现场的]]></description><category></category></item><item><title><![CDATA[算法系列（十三）图论基本概念和拓扑排序]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/51879346</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/51879346</guid><author>robertcpp</author><pubDate>Mon, 11 Jul 2016 14:49:20 +0800</pubDate><description><![CDATA[图的定义
一个图G=（V,E）,由定点的集合V，和边的集合E组成。每一条边都是一副点对（v，w）,边也称作弧，边上可以有权值。如果点对是有序的，那么图就是有向的。
图中的一条路径是一个顶点序列w1,w2,w3......wN,如果图中包含一条从顶点到自身的边，那么这个路径就是环。
有向无环图也成为DAG
如果在一个无向图中每个顶点到其它顶点都存在路径，则称这个无向图是连通的。具有这样性质的]]></description><category></category></item><item><title><![CDATA[JAVA并发编程（三）设计线程安全的类]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/51872613</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/51872613</guid><author>robertcpp</author><pubDate>Sun, 10 Jul 2016 19:16:20 +0800</pubDate><description><![CDATA[设计线程安全类的过程中需要注意三个基本要素：
1、找出构成对象的所有变量
2、找出约束状态变量的不变性条件
3、建立对象状态的并发访问管理策略
Java5.0提供了多种并发容器来改进同步容器的性能。同步容器将所有对容器状态访问都串行化，以实现它们的线程安全，这种方法的代价是严重降低了并发性。当多个线程竞争容器锁时，吞吐量将严重降低。
通过并发容器代替同步容器，可以极大的提高伸缩性，降低风险。]]></description><category></category></item><item><title><![CDATA[Android中View绘制流程分析]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/51867330</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/51867330</guid><author>robertcpp</author><pubDate>Sat, 09 Jul 2016 19:20:16 +0800</pubDate><description><![CDATA[在Activity的attach方法中通过调用PolicyManager.makeNewWindo创建Window,将一个View add到WindowManager时，WindowManagerImpl创建一个ViewRoot来管理该窗口的根View。并通过ViewRoot.setView方法把该View传给ViewRoot。
Activity中的Window对象帮我们创建了一个PhoneWindow内部类DecorView（父类为FrameLayout）窗口顶层视图。
WindowManagerImpl]]></description><category></category></item><item><title><![CDATA[算法系列（十二）散列]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/51863465</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/51863465</guid><author>robertcpp</author><pubDate>Fri, 08 Jul 2016 21:36:24 +0800</pubDate><description><![CDATA[Hash，一般翻译做“散列”，也有直接音译为“哈希”的，就是把任意长度的输入（又叫做预映射， pre-image），通过散列算法，变换成固定长度的输出，该输出就是散列值。这种转换是一种压缩映射，也就是，散列值的空间通常远小于输入的空间，不同的输入可能会散列成相同的输出，而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
标准库中包括Set和Map的散列实现，即HashSet类和HashMap类。HashSet的实现直接借助了HashMap。JDK中是使用]]></description><category></category></item><item><title><![CDATA[JAVA并发编程（二）内置锁和对象共享]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/51842802</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/51842802</guid><author>robertcpp</author><pubDate>Wed, 06 Jul 2016 22:18:26 +0800</pubDate><description><![CDATA[Java提供了一种内置的锁机制来支持原子性：同步代码块（Synchronized Block）。内置锁的最小颗粒度是对象，修饰方法上的锁也是作用于对象。有时候叫它方法锁，但是实际上是锁住的对象。
内置锁又被称为监视锁，线程在进入同步代码块之前会自动获得锁，推出时才释放锁，获得内置锁的唯一路径就是进入这个锁保护的同步代码块或者同步方法。
最多只有一个线程可持有这种锁，所以它是线程安全的。当某个线程请求一个其他线程持有的锁时，发出请求的线程就会阻塞。但是如果某个线程视图获得一个已经由自己持有的锁，这是可以得。也]]></description><category></category></item><item><title><![CDATA[Android不依赖Activity的全局悬浮窗实现]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/51628643</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/51628643</guid><author>robertcpp</author><pubDate>Sat, 02 Jul 2016 21:58:01 +0800</pubDate><description><![CDATA[Android悬浮窗实现 
实现基础
Android悬浮窗实现使用WindowManager ，WindowManager介绍　　
通过Context.getSystemService(Context.WINDOW_SERVICE)可以获得 WindowManager对象。
每一个WindowManager对象都和一个特定的 Display绑定。
想要获取一个不同的display的W]]></description><category></category></item><item><title><![CDATA[算法系列（十一）BASE64算法实现和使用说明]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/51628647</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/51628647</guid><author>robertcpp</author><pubDate>Fri, 01 Jul 2016 10:28:52 +0800</pubDate><description><![CDATA[完整的BASE64定义可见RFC 1421和RFC
 2045。编码后的数据比原始数据略长，为原来的
43。在电子邮件中，根据RFC
 822规定，每76个字符，还需要加上一个回车换行。可以估算编码后数据长度大约为原长的135.1%。
转换的时候，将三个byte的数据，先后放入一个24bit的缓冲区中，先来的byte占高位。数据不足3byte的话，于缓冲器中剩下的bit用0补足。然后，每次]]></description><category></category></item><item><title><![CDATA[Activity的生命周期和启动模式详解]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/51582725</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/51582725</guid><author>robertcpp</author><pubDate>Fri, 01 Jul 2016 10:12:42 +0800</pubDate><description><![CDATA[BACK键：
　　当我们按BACK键时，我们这个应用程序将结束，这时候我们将先后调用onPause()->onStop()->onDestory()三个方法。
再次启动App时，会执行onCreate()->onStart()->onResume()
HOME键:
　　当我们打开应用程序时，比如浏览器，我正在浏览NBA新闻，看到一半时，我突然想听歌，这时候我们会选择按HOME键，然后去打开音乐应用程序，而当我们按HOME的时候，Activity先后执行了onPause()->onStop()这两个方法，这时]]></description><category></category></item><item><title><![CDATA[Android进程分类与管理]]></title><link>https://blog.youkuaiyun.com/robertcpp/article/details/51628639</link><guid>https://blog.youkuaiyun.com/robertcpp/article/details/51628639</guid><author>robertcpp</author><pubDate>Thu, 30 Jun 2016 13:53:05 +0800</pubDate><description><![CDATA[Android采 取了一种有别于Linux的进程管理策略，有别于Linux的在进程活动停止后就结束该进程，Android把这些进程都保留在内存中，直到系统需要更多 内存为止。这些保留在内存中的进程通常情况下不会影响整体系统的运行速度，并且当用户再次激活这些进程时，提升了进程的启动速度。
那Android什么时候结束进程？结束哪个进程呢？之前普遍的认识是Android是依据一个名为LRU（last recently used 最近使用过的程序）列表，将程序进行排序，并结束最早的进程。但实际上这里面有更多的细节]]></description><category></category></item></channel></rss>