Java
Mr.QingBin
邮箱:280553230qq.com
展开
-
java枚举类Enum方法简介(valueof,value,ordinal)
Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class, 它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。 当我们在声明一个enum类型时,我们应该注意到enum类型有如下的一些特征。 1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。 2.所有枚举值都是public , st转载 2012-04-28 14:42:00 · 95385 阅读 · 0 评论 -
difference between clear data and clear cache ? Android
setting中清除代码1: 清空缓存packageManager 中 packageManagerService -> deleteApplicationCacheFilesAsUser(final UserEnvironment userEnv = new UserEnvironment(curUser);clearDirectory原创 2017-06-14 11:29:18 · 664 阅读 · 0 评论 -
Android 镜像使用帮助
注意: 本镜像是 AOSP 镜像,Android SDK因版权原因,我们不能提供镜像服务。参考 Google 教程 https://source.android.com/source/downloading.html, 将 https://android.googlesource.com/ 全部使用 https://aosp.tuna.tsinghua.edu.cn/ 代替即可。由转载 2016-12-30 11:29:44 · 1021 阅读 · 0 评论 -
Service的初始化流程与small插件化框架
1: bind service时序图2: start service时序图3: small 对service的支持--不支持动态加载,需在宿主中注册 通过反射为ActivityThread的mH变量添加callback唯一的功能是确保如果是启动不同的进程中的service,确保所有的插件已经被加载进来4 : 如何支持原创 2016-12-18 17:06:00 · 718 阅读 · 0 评论 -
android插件化 small rules
为什么要用small:1:解决65535的问题,不再依赖multidex,拆分dex变的可控2:small提供了一套插件间的解藕和通信方案,使得独立开发各个模块变得更加容易3:解藕后,各个业务模块可以独立更新4:低入侵性,即使后来改用其他的插件化方案也不需要更改代码结构--切换方案弹性更大 1: bundle.json 用来配置需要被加载的插件{ "u...原创 2016-11-11 11:02:13 · 1529 阅读 · 1 评论 -
BlockingQueue 接口浅析
public interface BlockingQueue extends Queue { /** * Inserts the specified element into this queue if it is possible to do * so immediately without violating capacity restrictions, re原创 2014-06-06 14:08:42 · 1262 阅读 · 0 评论 -
Timer 源码解读 (2) TaskQueue 最小堆实现的优先队列
Timer中的定义:原创 2014-04-06 11:03:07 · 3099 阅读 · 0 评论 -
java 中的设计模式--单例模式
public class SingleInstanceExample原创 2014-04-06 09:36:08 · 695 阅读 · 0 评论 -
sqlcipher加密已有数据库及其时机
最近我们做的移动im打算将数据库加密,我们的数据库是对数据库的简单封装 ,调研了一些开源数据库加密工具,觉得sqlcipher用户会多一点,而且开源。所以打算就用它了 sqlcipher的使用可以参考下这两篇文章: http://www.jianshu.com/p/3baf311f8c8c https://www.zetetic.net/sqlcipher/sqlcipher-a原创 2017-08-26 05:45:49 · 6156 阅读 · 1 评论 -
Android mvc,mvp , mvvm三种设计模式的选择实践
google 官方mvp实践没有一种放之四海皆准的设计模式•追随业务•遵循最基础的原则• 1: 业务逻辑简单,没有可复用模块的直接mvc• 2: 有可服用模块 抽取presenter层• 3: 业务模型,ui框架变动不频繁采用mvp• 4: mvvm原创 2017-09-15 17:36:16 · 474 阅读 · 0 评论 -
java判断是否是emoji字符(史上最全)
int codePoint = Character.codePointAt(chars, i);//使用charcode而不是直接用char是因为有些字符需要两个char来表示 lowsurragate highsurrgateisEmojiCharacter(codePoint); public static boolean isEmojiCharacter(int codePoint...原创 2019-07-24 17:39:43 · 10613 阅读 · 0 评论 -
rxjava2.0 线程切换的原理及SubscribeOn,ObserveOn的用法
android开发过程中经常会用到线程切换,比如数据加载、文件存储、数据库操作等都是在io线程处理,而处理结果的展示刷新ui需要在ui线程进行。如果不用rxjava,我们可能会asycTask,或者retrofit自己默认的callback来在ui线程刷新ui。但是当我们的操作变复杂时,比如一个接口的数据依赖于另一个接口的返回,或者一次上传多张图片功能,就会造成接口多层嵌套进而增加维护成本注:...原创 2019-06-06 16:41:49 · 1453 阅读 · 0 评论 -
忽略java 运算符的优先级 的一次教训
java运算符号的顺序表,之前没有硬记导致今天遇到了一个诡异的bug 当时是这样写的 :onFail("数据返回为空或格式不正确"+body!=null?body.getStatus():"",null); 并且这个条件很少会走到,结果导致上线几个版本才因为服务器的一次异常导致了crash, 反编译了声称的apk文件,结合上面的运算符的优先级可以如下:if("数据返原创 2017-10-31 19:10:37 · 324 阅读 · 0 评论 -
git中统计代码行数
查看git上个人代码量git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc原创 2017-11-16 10:20:14 · 80058 阅读 · 3 评论 -
看源码了解Gson excludeStrategy的使用
使用exclude strategy的场景:我们知道Gson 序列化的时候通常有些字段不需要seralize到json中去,gson给我们提供了一个annotaion,Expose 定义: @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface Exp原创 2017-11-09 19:07:29 · 547 阅读 · 0 评论 -
heapsort in PriorityQueue
先上图:size = 8Pi = (Ci+1)/2-1CLi = 2Pi+1CRi = CLi+1备注:Pi为父节点index Ci为子节点index CLi为左子节点index CRi为右子节点indexPriorityQueue中的数据结构为:Object[] queue ,是一个原创 2017-11-09 14:55:30 · 292 阅读 · 0 评论 -
Timer 源码解读 (1) TimerTask简介
我们从类定义可以看出 :public abstract class TimerTask implements Runnable原创 2014-04-05 22:26:42 · 1285 阅读 · 0 评论 -
可重入锁 ReentrantLock 源码解读 (2)锁框架 AbstractQueuedSynchronizer
Provides a framework for implementing blocking locks and related synchronizers (semaphores, events, etc) that rely on first-in-first-out (FIFO) wait queues. 如java API AbstractQueuedSynchronizer文档所原创 2014-03-22 09:32:53 · 1343 阅读 · 0 评论 -
java wait()和sleep()方法之经验谈
sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep 不会释放对象锁。wait 是Object 类的方法,对此对象调用wait 方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify 方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。转载 2012-08-16 09:40:31 · 14301 阅读 · 0 评论 -
java Reference
ReferenceJava世界泰山北斗级大作《Thinking In Java》切入Java就提出“Everything is Object”。在Java这个充满Object的世界中,reference是一切谜题的根源,所有的故事都是从这里开始的。Reference是什么?如果你和我一样在进入 Java世界之前曾经浪迹于C/C++世界,就一定不会对指针陌生。谈到指针,往日种种不堪回转载 2012-08-10 11:09:03 · 879 阅读 · 0 评论 -
java observer和observable 实现观察者模式
在Java中通过Observable类和Observer接口实现了观察者模式。一个Observer对象监视着一个Observable对象的变化,当Observable对象发生变化时,Observer得到通知,就可以进行相应的工作。例如在文档/视图结构中,文档被修改了,视图就会得到通知。 java.util.Observable中有两个方法对Observer特别重要,一个是setCha转载 2012-07-17 11:18:38 · 1481 阅读 · 0 评论 -
ThreadLocal与synchronized
昨天上Java版块逛了一圈,一个2万5千人浏览的帖子引起了偶滴注意 ThreadLocal与synchronized ,9页以上的回复,足见大家对这个问题的兴趣。 老实说,从看到这个帖子的题目开始,就觉得帖子的作者估计是在概念上有所混淆了,于是乎想写个咚咚,同大家分享一下自己的心得。 帖子上,讨论的人很多,高手不乏,各抒己见,但不知新手们看明白没有,因此,这里偶转载 2012-07-06 13:47:38 · 774 阅读 · 0 评论 -
anroid中的消息处理机制--基本概念
我们先来看一些术语:1.Parcel:其实就是一个容器,我们来看官方描述:Container for a message (data and object references) that can be sent through an IBinder。很简单,就是一个消息的集合,而这样的集合是可以通过IBinder接口发送的。2.Me转载 2012-06-11 16:48:39 · 729 阅读 · 0 评论 -
对View DrawingCache的理解
View组件显示的内容可以通过cache机制保存为bitmap, 使用到的api有 void setDrawingCacheEnabled(boolean flag), Bitmap getDrawingCache(boolean autoScale), void buildDrawingCache(boolean autoScale),转载 2012-06-04 16:55:03 · 454 阅读 · 0 评论 -
通天塔导游:各种编程语言优缺点
(译注:圣经记载:在远古的时候,人类都使用一种语言,全世界的人决定一起造一座通天的塔,就是巴别塔,后来被上帝知道了,上帝就让人们使用不同的语言,这个塔就没能造起来。 巴别塔不建自毁,与其说上帝的分化将人类的语言复杂化,不如说是人类自身心灵和谐不再的分崩离析。之所以后来有了翻译,不仅是为了加强人类之间的交流,更寄达了一种愿望,希望能以此消除人际的隔阂,获求来自心灵的和谐及慰藉。真正的译者,把握血脉,转载 2012-05-03 09:32:38 · 1091 阅读 · 0 评论 -
Java Socket
Sockets let you send raw streams of bytes back and forth between two computers, giving you fairly low-level access to the TCP/IP protocol. See the File I/O Amanuensis for sample code to do that. In转载 2012-09-12 09:38:52 · 1290 阅读 · 0 评论 -
java 多线程基础--各种状态及状态之间的转换
线程转换图线程在它的生命周期中会处于各种不同的状态:新建、等待、就绪、运行、阻塞、死亡。1 新建用new语句创建的线程对象处于新建状态,此时它和其他java对象一样,仅被分配了内存。2等待当线程在new之后,并且在调用start方法前,线程处于等待状态。 --2012-12-213 就绪当一个线程对象创建后,其他线程调用它的start()方法,该线程就进转载 2012-07-09 16:15:18 · 8411 阅读 · 0 评论 -
可重入锁 ReentrantLock 源码解读(1)简介
ReentrantLock的构造函数: public ReentrantLock() { sync = new NonfairSync(); } public ReentrantLock(boolean fair) { sync = (fair)? new FairSync() : new NonfairSync();原创 2014-03-21 21:18:26 · 2670 阅读 · 1 评论 -
java 多线程基础--多线程及并发
当多任务同时运行的时候,我们称之为并发。在cpu单核的情况下,多任务轮流获得时间片,在多核的情况下多任务可同时运行。这里的任务我们可以简单理解为线程。我们可以通过new Thread()来创建java的线程。关于主线程当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程。也就是在new Thread()之前,所有的代码都运行在主线程里。主线程的原创 2012-12-21 11:04:55 · 643 阅读 · 0 评论 -
java 中的设计模式
工作中有很多地方用到了设计模式而不自知。android Handler,looper消息传递机制------命令模式java iterator接口----迭代器模式java observer, observerable---观察者模式java io---装饰器模式java threadpool --- 工厂模式原创 2014-02-11 20:53:42 · 687 阅读 · 0 评论 -
J.U.C里常用到了Unsafe类资源汇总
Unsafe功能介绍:http://blog.csdn.net/aesop_wubo/article/details/7537278Unsafe功能调用实践:http://jackycheng2007.iteye.com/blog/1473464如果相查看Unsafe源码:可以下载开源的openJDK源码,在目录openjdk/jdk/src/share/c原创 2013-12-06 11:30:49 · 1194 阅读 · 0 评论 -
java类的延迟初始化及其特性
jvm通过classLoader来加在编译生成class文件。来生成可操作的java类视图。但是java并不是在一开始的时候就将会将程序中所有的class文件都加载起来。而是在需要的时候可以动态加载,这给java带来了更多的灵活性。像从网络的下载的class文件可以在程序运行的过程中动态的加载,或者运行时的类型安全的转换。这是c++这种静态编译语言所无法实现的。当然动态加载也有其缺原创 2014-01-08 11:26:14 · 1603 阅读 · 0 评论 -
关于MessageQuene, 关于IdealHandler
最近在看android message处理机制。 以前看到有Looper.myQueue().addIdleHandler(new IdleHandler() {@Overridepublic boolean queueIdle() {}}这样的代码一直不懂,其原理是什么,只是从ADK中了解到其作用:向消息队列中添加一个新的MessageQueue.IdleHandle原创 2012-08-07 13:39:32 · 3759 阅读 · 1 评论 -
t.interrupt(),t.isInterrupted(),Thread.interrupted()
原文地址见:http://www.blogjava.net/fhtdy2004/archive/2009/08/22/292181.htmlhttp://www.blogjava.net/fhtdy2004/archive/2009/06/08/280728.html中有关interrupt()的解释已经很清楚了interruptpublic void interrup转载 2013-02-21 16:16:29 · 566 阅读 · 0 评论 -
java lamda表达式
作者:Mingqi链接:https://www.zhihu.com/question/20125256/answer/324121308来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。答主对Java比较熟悉,就用Java来讲一讲吧。什么是Lambda?我们知道,对于一个Java变量,我们可以赋给其一个“值”。如果你想把“一块代码”赋给...转载 2019-08-18 09:55:20 · 1122 阅读 · 0 评论