斐波那契堆
码龄9年
关注
提问 私信
  • 博客:12,721
    12,721
    总访问量
  • 34
    原创
  • 2,215,335
    排名
  • 0
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:山东省
  • 加入CSDN时间: 2016-09-10
博客简介:

github_36104340的博客

查看详细资料
  • 原力等级
    当前等级
    0
    当前总分
    0
    当月
    0
个人成就
  • 获得0次点赞
  • 内容获得1次评论
  • 获得1次收藏
  • 博客总排名2,215,335名
创作历程
  • 35篇
    2016年
成就勋章
TA的专栏
  • 无聊
    5篇
  • git
    2篇
  • android
    21篇
  • 焦虑
    12篇
  • volley源码
    10篇
  • 犯困
    1篇
创作活动更多

王者杯·14天创作挑战营·第2期

这是一个以写作博客为目的的创作活动,旨在鼓励码龄大于4年的博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。 注: 1、参赛者可以进入活动群进行交流、分享创作心得,互相鼓励与支持(开卷),答疑及活动群请见https://bbs.csdn.net/topics/619735097 2、文章质量分查询:https://www.csdn.net/qc 我们诚挚邀请你们参加为期14天的创作挑战赛!

81人参与 去参加
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

IntentFilter

Action每个Intent只能有一个Action,一般来说set…函数设置的值是唯一的,而add…函数设置的值不是唯一的。如果一个一个intent和IntentFilter要匹配则两者都不为空,且intent中的action能在intentFilter中找到。 我在官网文档中看了这么一句 Action matches if any of the given values match the
原创
发布博客 2016.12.14 ·
554 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Volley ImageLoader

大体逻辑发送网络请求用的是volley,然后多加了一个cache这是个适配器接口推荐是LruCache,先到cache中去找,找不到在添加进volley中到网络中区请求,如果找到了那么就直接就执行图片的添加逻辑,这个逻辑直接就执行了,没有作转到主线程的操作,所一个要求get()函数必须要在主线程调用。如果没在cache中找到就添加进volley,如果这时候已经有相同的请求在队列中了那么就讲请求添加到
原创
发布博客 2016.11.28 ·
314 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Volley DefaultRetryPolicy

有一个技术起mCurrentRetryCount计数试了多少次了。在BasicNetwork类中 public NetworkResponse performRequest(Request<?> request) throws VolleyError { long requestStart = SystemClock.elapsedRealtime(); while
原创
发布博客 2016.11.25 ·
576 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Volley CacheDispatcher

不断地从mCacheQueue中取出请求,然后到cache中区找,如果不命中则加入到mNetworkQueue队列中让另一个去处理,如果命中,那么分两种情况,不需要刷新就直接 mDelivery.postResponse(request, response);如果需要刷新就 mDelivery.postResponse(request, response, new Runnable() {
原创
发布博客 2016.11.25 ·
312 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Volley NetworkDispatcher

这是一个继承了线程Thread的类,用来具体处理网络请求,将request从BlockingQueue中取出来处理。这个类重写了run()方法具体会在这个方法中处理网络请求,存入缓存,以及response的分发。@Override public void run() { Process.setThreadPriority(Process.THREAD_PRIORITY_BAC
原创
发布博客 2016.11.25 ·
253 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Volley RequestQueue

这个类没有继承任何类或借口,所以他不是一个Queue。 这个类主要维护了几个队列,将request加紧队列然后开启线程处理队列中的request private final Map<String, Queue<Request>> mWaitingRequests = new HashMap<String, Queue<Request>>();这个mWaitingReques
原创
发布博客 2016.11.24 ·
319 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Volley DiskBasedCache

大体思路这其实是一个LRU cache 用private final Map<String, CacheHeader> mEntries = new LinkedHashMap<String, CacheHeader>(16, .75f, true);来维护一个优先队列,在空间满了的时候讲那些队头的删掉,因为 LinkedHashMap的构造函数最后一个参数access
原创
发布博客 2016.11.24 ·
437 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Volley http协议摘要

Etag主要为了解决Last-Modified无法解决的一些问题.他能比Last_Modified更加精确的知道文件是否被修改过.如果有个 文件修改非常频繁,比如在秒以下的时间内进行修改,比如1秒内修改了10次,If-Modified-Since能检查只能秒级的修改,所以这种修改无法 判断.原因是UNIX记录MTIME只能精确到秒.所以我们选择生成Etag,因为Etag可以综合Inode,MTime
原创
发布博客 2016.11.23 ·
418 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Volley Http缓存机制

https://www.path8.net/tn/archives/2745//如果你第二次 (或第三次,或第四次) 请求相同的数据,你可以告诉服务器你上一次获得的最后修改日期:在你的请求中发送一个 If-Modified-Since 头信息,它包含了上一次从服务器连同数据所获得的日期。如果数据从那时起没有改变,服务器将返回一个特殊的 HTTP 状态代码 304,这意味着 “从上一次请求后这个数据
原创
发布博客 2016.11.23 ·
332 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

volley PoolingByteArrayOutputStream

概述PoolingByteArrayOutputStream继承了ByteArrayOutputStream然后其中有加了一个ByteArrayPool,当ByteArrayOutputStream中的buff数组容量慢了之后,从ByteArrayPool获取新的数组,这样heap和垃圾回收机制可以少干活。这个重写了write()函数在调用基类的write之前先检查是否满了如果满了就用Pooling
原创
发布博客 2016.11.23 ·
384 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Volley ByteArrayPool

private List<byte[]> mBuffersByLastUse = new LinkedList<byte[]>(); //维护一个优先队列,在容量超过mSizeLimit时候从优先队列的队头开始删除 private List<byte[]> mBuffersBySize = new ArrayList<byte[]>(64); //用来存放所有的数组,因为是按照二分
原创
发布博客 2016.11.23 ·
415 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Volley 图片缩放逻辑

private static int getResizedDimension(int maxPrimary, int maxSecondary, int actualPrimary, int actualSecondary) { // If no dominant value at all, just return the actual. if
原创
发布博客 2016.11.22 ·
323 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

AIDL Binder

IBinder 是个接口,而Binder是他的实现类,binder的底层实现由驱动程序陷入内核的,大体是进程A将信息给binder从陷入内核,而后再由内核的驱动程序发给进程B,大体是这样具体我也不太清楚。 Binder真正起作用的是onTrancat() 和 Trancat()函数这两个函数主要实现了进程间的信息传递,AIDL大体流程是通过binder告诉另外一个进程我想要执行什么函数,并且
原创
发布博客 2016.11.17 ·
449 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Socket进程间通讯

大体思路服务器开一个无线循环一直监听8688端口,如果有程序连进来就建立连接,然后从socket中获得输入输出流,在一个无限循环中不断地readline()(这个函数是堵塞的,如果连接断开则会返回null那么这时候就结束循环),客户端也是这样无限循环中不断地读,注意printwriter的构造器中要把自动刷新设为TRUE; 用Socket要设置网络权限;服务器端代码 建立接口监听,每有一个进
原创
发布博客 2016.11.17 ·
1102 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

bind另一个应用的服务

服务器xml代码<service android:name=".BookManagerService" android:process=".remote" android:enabled="true" android:exported="true"/> android:enabled 这个属性用于指示该服务是否能够
原创
发布博客 2016.11.17 ·
637 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

HashSet

private transient HashMap<E,Object> map; private static final Object PRESENT = new Object();public static void main(String[] args){Set<Person> set = new HashSet<Person>();Person p1 = new Person("唐
原创
发布博客 2016.11.10 ·
197 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

CopyOnWriteArrayList

public boolean add(E e) { final ReentrantLock lock = this.lock; // 获取独占锁 lock.lock(); try { Object[] elements = getArray(); in
原创
发布博客 2016.11.08 ·
206 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

CorrentHashMap

/** * 使用 key 的散列码来得到 segments 数组中对应的 Segment */ final Segment<K,V> segmentFor(int hash) { // 将散列值右移 segmentShift 个位,并在高位填充 0 // 然后把得到的值与 segmentMask 相“与” // 从而得到 hash 值对应的 segm
原创
发布博客 2016.11.08 ·
981 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

volatile

双重检测class Singleton{ private volatile static Singleton instance = null; private Singleton() { } public static Singleton getInstance() { if(instance==null) { synchronize
原创
发布博客 2016.11.03 ·
338 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

PULL解析XML

public void readXMLPull(InputStream in){ try { XmlPullParser parser=XmlPullParserFactory.newInstance().newPullParser(); parser.setInput(in,"UTF-8"); int eve
原创
发布博客 2016.11.02 ·
221 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多