不错的视频http://edu.youkuaiyun.com/course/detail/1923/29851?auto_start=1
http://m.blog.youkuaiyun.com/article/details?id=52957488
1. 在onCreate中开线程更新ui,是可以的。
原因: ui线程rootview在onResume之后才建立.
2.下载源码:
1.android studio : sdk manager 只能查看framework层源码。下载位置在sdk里。
2:repo需要翻墙。
3.查看源码
1. studio
2.ecplise
4.onSaveinstance:
1.activiy回收的时候。
2.配置改变的时候,比如旋转屏幕。
5.启动模式:
1.standard:
2.singletop:
3.singletask:自带cleartop
4.singleinsance:所有栈,只有一个实例
6.
7.IPC
1.binder
2.aidl
3.messger
4.广播
5.socket
6.contentprovider
8.多进程
1.数据不能互相访问。
2.sharedpreference 最好别使用
9序列化:
可以夸进程传输。
1. parcelable : 效率高,麻烦。 serializable:效率高,实现简单。
静态成员变量不参与序列化过程。标记。transient
10binder:
服务端:有异常,可以传递给客户端。自己不会异常中断。
11简单ipc
SharedPreferences不支持多线程,进程也是不安全的
12.Messenage收消息必须用handler
13 view 动画:
scrollto :内容的移动变化
objectanimator: 属性动画
translation view动画,只是图像的变化,原来的位置还有那个控件。
14.自定义drawable. 参考 bitmapdrawable shapedrawable. 比xml定义要灵活。
15。remoteview: 反射实现的。跨进程。不能有edittext. 知道包名和view的id,就可以夸应用显示。
16.mat和leakcanary 内存泄露 leakcanary比较实用
17.线程池:
23 解决滑动冲突。
scrollview 包含了 listview:
父元素scrollview,拦截世纪
24获得view的宽高的方法:有三个:
1. onWindowFocusChanged
2. view.post
3.getViewTreeObserver().addOnGlobalLayoutListener()
4. wrap_content 不能getHeight, 用getMeasuredWidth()。之前要执行xxx.mesure();
int heightMesureSpec = MeasureSepc.makeMeasureSpec ( (1 << 30) -1 , MeasureSepc.AT_MOST)
button.messure(0 , heightMesureSpec)
Draw方法:顺序,先画父元素。
dispatchdraw :在onDraw之后调用。