Android 每日学习笔记

来源:互联网 发布:移动网络电视无中央5台 编辑:程序博客网 时间:2024/05/16 12:57


Android学习也挺久了,感觉遇到了瓶颈,功能开发基本没有问题,可是在几次面试的时候还是会被问到一些原理性的东西答不上来,所以决定每日搞懂一些Android常用的知识,当然应该更多的去关注原理性的东西,仅仅以此文章记录每日学习的知识要点,权当整理,积少成多。


2014-6-17

1、Android Handler机制和looper


2、Android 内存回收的五个等级:Empty 、Background 、Service 、Visible 、Foreground

  http://www.cnblogs.com/bastard/archive/2012/08/17/2644169.html


3、Android 触摸事件传递机制

1)public boolean dispatchTouchEvent(MotionEvent ev)  这个方法用来分发TouchEvent

2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent

3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent


4、java常用数据结构

 Collection  (最基本的集合接口,一个Collection代表一组Object,支持一个iterator()方法,返回一个迭代器)

|-List (有序的Collection,允许相同元素)

| |-LinkedList (基于链表实现,插入删除性能高,查找效率低,非同步)

| |-ArrayList (可变大小的数组,允许所有元素,包括null.非同步)

| |-Vector (类似于ArrayList,但为同步,在迭代时,另一个线程修改Vector会抛出异常)

|   |-Stack (实现先进后出的堆栈,实现堆栈的基本操作:push、pop、peek、empty、search)

|

|-Set(不允许相同元素)

   

Map  (提供key到value的映射)

|-Hashtable (key-value映射的哈希表,均为非空对象,同步)

|-HashMap (非同步,允许空对象)

|-WeakHashMap (HashMap的改进,key为弱引用)

   
5、排序:(有点儿多,只做简单的几个排序算法)

1、直接选择排序:

每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待

排序的数据元素排完,经过n-1趟比较,不稳定,具有O(1)额外的空间,时间复杂度为O(n2),交换时间复杂度为O(n)。

2、堆排序:

利用堆的数据结构设计,生成堆,比较交换、重新生成堆。最坏时间复杂度是O(nlong2n)。

3、冒泡排序:

时间复杂度O(n2)。

4、快速排序:

从待排的数据序列中任取一个数据作为分界值,所有比它小的放到左边,所有比它大的放到右边。递归。

5、直接插入排序:

将待排序的数据元素按其关键字值得大小插入到前面的有序序列中。

  
6、Android中将布局文件/View添加至窗口过程分析 ---- 从setContentView()谈起 

7、Android中View绘制流程以及invalidate()等相关方法分析


2014-6-18

8、最近一直在看一本书《Java开发技术  在架构中体验设计模式和算法之美》,值得一看。


9、Android的动画:

1)补间动画:给出两个关键帧,通过一些算法将给定属性值在给定的时间内在两个关键帧间渐变。(未改变对象的属性值,只能作用与View)

2)帧动画:通过一系列Drawable依次显示来模拟动画的效果。

3)属性动画:与补间动画类似,但是改变对象的属性值,可作用于任何对象。3.0引进


10、java的引用机制,以及java的几种引用类型:强引用、软引用、弱引用、虚引用。

1)引用是一种数据类型,保存了对象在内存中的地址

2)不同的引用可能指向同一个对象

还有一个有点儿纠结的问题,就是java的值传递。


2014-6-19

11、今天主要复习了一下数据库SQL查询语句

1)基本查询:运算符、as、like、Order By、

2)子查询:单值比较、多值(In、All、Some(或Any)、Exists)、

3)聚合函数:Avg()、Sum()、Min()、Max()、Count()、Group By、Having、Exists 

4)连接查询,内连接、外连接(左、右、全)

5)视图

6)约束

2014-6-20


12、String、Stringbuffer、StringBuild

String 字符串常量,每次产生一个新的对象

StringBuffer 字符串变量(线程安全)

StringBuilder 字符串变量(非线程安全)


13、线程安全的map  http://www.cnblogs.com/lianghui66/archive/2013/08/19/3267452.html

Hashtable:线程安全,但不允许空,并直接锁住整个hash表

synchronizedMap:堆hashmap的相关方法做锁处理,但依旧存在线程安全问题

ConcurrentHashMap: 一次锁住一个桶,默认将hash表分为16个桶,也就是默认允许最多16个写线程同时访问hash表


14、广播

静态广播:xml注册,优先级低于动态广播

动态广播:java代码注册,只在程序运行过程中有效,需要取消注册

有序广播和无序广播

进程内本地广播:LocalBroadcastManager进程内通信(数据安全、防止伪造广播、高效)



15、fragment之间的通信

本来是想找fragment间直接通信的,可是查了一些资料发现都是fragment和acticity通信,也就是说fragment之间间接通信。其实这种方式拓展性更好。

另外多关注一下fragment的生命周期。

顺带遇到一个BUG,就了解了一下LayoutInflater和FragmentTransaction以及add、replace、addToBackStack



16、线程池 http://www.oschina.net/question/565065_86540

非常重要的一个知识点 顺带学习了一下队列BlockingQueue http://wsmajunfeng.iteye.com/blog/1629354

17、listView为什么滑动会卡

开始的时候很困惑面试官问的这个问题,因为其实我自己真没遇到过。后来在他的引导下,才知道他想问的是getView中处理convertView的问题。好吧。

其实这个滑动卡的话,主要原因还是getView中处理注意避免耗时操作,用异步去处理。如果网络数据的话,常规处理是分页加载。

18、图片做二级缓存

暂缓....

19、网络数据传输时,json和xml的区别

这个暂时还没找到比较好的资料  http://www.cnblogs.com/SanMaoSpace/p/3139186.html

感觉主要还是json主要还是轻量级的,不知道对不对

20、开始看《Android 4.0网络编程详解》

21、AsyncTask异步4.0的区别

其实主要是3.0以前AsyncTask内部线程池做了限制,大小为5个,也就是同时最多只能运行5个后台线程,超过则等待。3.0以后对该类做了一些拓展,

主要是线程池的一些拓展。所以啊,线程池还是很重要的。另外对程序的设计也有一定的要求,并不是什么东西直接放异步就能解决了的。

0 0
原创粉丝点击