[置顶] 【学习清单】我的Android学习清单

我把Android重难点和读书笔记都整理在github上:https://github.com/miomin/AndroidDifficulty如果你觉得对你有帮助的话,希望可以star/follow一下哟,我会持续保持更新。1、学习知识的途径笔主写这篇文章的时候,是大三,刚刚拿到阿里巴巴、腾讯、百词斩的实习offer,学习Android一年,平时获取知识的途径主要有:书本、视频教程、博客、Gith...
阅读(4614) 评论(2)

[置顶] 【Java数据结构】Hashmap、Hashtable、ConcurrentHashMap源码阅读笔记

引言:这几天在捣鼓Hashmap跟Hashtable的区别,其中关注的 b比较多的就是Hashmap和Hashtable计算在Entry[]数组中index的方法到底有什么区别。 Hashmap跟Hashtable的实现原理比较类似,借用一张其他地方偷来的图。 可以看到,都是采用外拉链的方式来实现元素存储,底层是数组+链表实现,原理都不说了,学过数据结构中hash冲突解决的同学应该都能理解。实现的关...
阅读(3982) 评论(3)

[置顶] 【Android性能优化】Android图片加载方案--Bitmap的内存管理和优化方案

写在前面:笔者的上一篇博文有提到过,如果不恰当的使用Bitmap,很容易造成OOM。这篇博文就来谈谈应该如何正确的管理Bitmap的内存,以及优化策略。参考: Google官方教程 – 《Android Training Ccourse》一、加载按显示需要的比例缩小的图片1、先来说说屏幕密度 在Android中,Imageview控件的长宽单位一般设置为dp/dip,而不用px。这样做的原因,是因为...
阅读(9783) 评论(0)

[置顶] 【Android性能优化】内存泄露和内存溢出(OOM)的引发原因及优化方案

一、内存泄露 垃圾回收器无法回收原本应该被回收的对象,这个对象就引发了内存泄露。 内存泄露的危害: (1)过多的内存泄露最终会导致内存溢出(OOM) (2)内存泄露导致可用内存不足,会触发频繁GC,不管是Android2.2以前的单线程GC还是现在的CMS和G1,都有一部分的操作会导致用户线程停止(就是所谓的Stop the world),从而导致UI卡顿。 二、内存溢出(OOM) Android...
阅读(11037) 评论(0)

[置顶] 【理解JVM】深入浅出JVM垃圾收集(HotSpot)

引言:我的上一篇博文提到JVM运行时的内存分块和GC的基本思想及算法,在GC的道路上越走越远,接下来要做的就是 深入浅出JVM的垃圾收集机制。一、分代垃圾回收1、新生代:大部分刚被创建的对象被分配到这里,生命周期短,被创建后很快变成不可达。在新生代区域内发生的GC称为minor GC。新生代被划分为三个区域: 1个Eden空间 2个Survivor空间 在节点拷贝法中,不会简单的将内存划分为1:1的...
阅读(2662) 评论(0)

[置顶] 【理解JVM】JVM内存分块和垃圾收集算法(HotSpot)

一、JVM内存分块Java虚拟机在执行Java程序时,会将该过程中所管理的内存划分成不同的数据块,这些区域有各自不同的用途和生命周期,参考《深入理解JVM虚拟机》,总结出以下结论: (1)PC:每个线程有独立的PC,PC的值指向程序即将执行的下一条指令的地址。 (2)JVM Stack:每个线程都拥有一个,每个方法在执行时都会创建一个栈帧,存储局部变量,返回地址等等,用于方法执行和返回。 (3)Na...
阅读(324) 评论(0)

【自定义View系列】04--谈谈事件分发

引言:这部分会分三个模块来讲,先讲View对Touch的处理,再讲ViewGroup的事件分发,最后讲如何解决滑动冲突。我习惯通过在源码中添加注释来理解源码,以下是我提取出来几个重要方法,将不重要的部分删掉,并且添加了中文注释。一、先从View讲起如果一个View(比如Button)接收到Touch,那么该Touch事件首先会传入到它的dispatchTouchEvent( )方法,所以我们从这里开...
阅读(1172) 评论(0)

【自定义View系列】03--onLayout源码分析

一、源码分析 在经过measure阶段以后,系统确定了View的测量大小,接下来就进入到layout的过程。 在该过程中会确定视图的显示位置,即子View在其父控件中的位置。 先看View的layout( )方法:...
阅读(261) 评论(0)

【自定义View】02--measure源码详尽分析

大家知道,自定义View有三个重要的步骤:measure,layout,draw。而measure处于该链条的首端,占据着极其重要的地位;然而对于measure的理解却不是那么容易,许多问题都是一知半解,比如:为什么父View影响到了子View的MeasureSpec的生成?为什么我们自定义一个View在布局时将其宽或者高指定为wrap_content但是其实际是match_parent的效果?子View的specM...
阅读(301) 评论(0)

【自定义View】01--常用工具介绍

本文转载自:http://blog.csdn.net/lfdfhl/article/details/51324275 在自定义View的时候,常常会用到一些Android系统提供的API工具。这些API封装了我们经常会用到的方法,比如拖拽View,计算滑动速度,View的滚动,手势处理等等。如果我们自己去实现这些方法会比较繁琐,而且容易出一些bug。所以,先介绍一下这些常用的工具,以便在后续的学习和工作中使用。...
阅读(358) 评论(0)

【View工作原理】ViewRoot、DecorView、MeasureSpec和LayoutParams

一、窗口层级关系 1、PhoneWindow 是Android中最基本的窗口系统,每个Activity会创建并持有一个PhoneWindow对象,是Activity和整个View系统交互的接口。 2、DecorView (1)Dispatch ViewRoot分发来的key、touch、trackball等外部事件。 (2)DecorView有一个直接的子View,我们称之...
阅读(244) 评论(0)

【Android学习笔记】Android RecyclerView 使用完全解析 体验艺术般的控件

一、概述RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进行使用。 据官方的介绍,该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我们并不陌生,例如:ListView、GridView。那么有了ListView、GridView为什么还需要R...
阅读(271) 评论(0)

【Android学习笔记】Android中View的事件分发机制

Touch事件分发中只有两个主角:ViewGroup和View。Activity的Touch事件事实上是调用它内部的ViewGroup的Touch事件,可以直接当成ViewGroup处理。...
阅读(264) 评论(0)

【Android性能优化】使用NDK进行Java和C++混编

一、Java和C/C++混编的步骤 (1)在Java代码中声明本地方法 (2)实现Java本地接口(JNI)粘合层 (3)创建Android makefile文件(Android Studio不需要,Gradle代替) (4)使用C/C++实现native方法 (5)编译native库 (6)加载native库...
阅读(709) 评论(0)

【码上杂谈】关于之前对Server上允许的最大TCP连接数理解错误的更正

前几天去国内某二线互联网企业参加实习生面试,与面试官讨论Server上允许的最大TCP连接数是多少。我回答,由于资源限制或其他客观因素,一般保持3000-4000的连接就死掉了。面试官问我,如果不考虑这些因素,理论上的最大连接数应该是多少? 我回答如下:操作系统上端口号1024以下是系统保留的,从1024-65535是用户使用的。由于每个来自客户端Socket的TCP连接都要占一个端口号,所以我们最...
阅读(1732) 评论(0)

【Android性能优化】布局的性能优化

APP的每个View和Layout都需要经过Measure、Layout和Draw三个过程,如果布局层级过深,这个过程就会非常耗时。所以减少Layout的层级是优化布局性能的一个重要手段。本文将介绍通过include、merge、ViewStub三种手段来进行Android布局层级优化。...
阅读(1800) 评论(0)

【Java并发编程】对比synchronized和Lock

引言:在Java中,可以使用关键字synchronized来实现同步访问,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?那得先从synchronized的缺陷讲起。 转载自海子的博文:《Java并发编程:Lock》一、synchron...
阅读(1443) 评论(0)

【Thinking in Java读书笔记】如何安全的终止线程

参考资料:《Thinging in Java》引言:在较早的Java代码中,是使用suspend()和resume()来终止和唤醒线程,但是现在已经被废止了,因为可能导致死锁。stop()强制终止线程的方式也已经不推荐使用,因为它不释放线程获得的锁,还会产生一些不可预料的后果。下面看看《Thinging in Java》中建议我们如何来终止线程。一、线程进入阻塞态的原因 在阻塞态中终止线程,需要做一...
阅读(2867) 评论(0)
22条 共2页1 2 下一页 尾页
    个人资料
    • 访问:53763次
    • 积分:673
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:5篇
    • 译文:1篇
    • 评论:6条
    文章分类
    最新评论