4)Activity,Window,View三者的差别,Fragment的特点?
Activity是控制单元,Window是承载模型,View是显示视图(窗花),LayoutInflater是剪刀,
Xml像窗花的图纸。
(1)在Activity中调用attach,创建一个window
(2)创建window是其子类PhoneWindow,在attach中创建的是PhoneWindow
(3)创建Activity中调用setContentView(R.layout.xxx)来绑定view,其中实际上是调用的
getWindow().setContentView(),即调用PhoneWindows中的setContentView方法。
(4)创建ParentView:作为ViewGroup的子类,实际是创建的DecorView,将制定的Layout
通过布局填充器进行填充,调用ViewGroup的removeAllView先将所有的view移除掉
(5)添加新的View:addView()
Fragment的特点
(1)Fragment可以作为Activity界面的一个组成部分出现
(2)可以在一个Activity中出现多个Fragment,并且一个Fragment也可以在多个Activity中使用
(3)Activity运行过程中可以添加,移除或者替换Fragment
(4)Fragment可以相应自己的输入事件,并且有自己的生命周期,他们的生命周期会受到宿主
Activity的生命周期影响。
5)Handler,Thread和HandlerThread的差别
从Android中Thread描述可以看出,Android的Thread没有对Java的Thread做任何封装,但是Android
提供了一个基础自Thread的类HandlerThread,这个类对Java的Thread做了很多针对Android系统的封装。
android.os.Handler可以通过Looper对像实例化,并运行于另外一个线程中,Android提供了让Handler
运行与其他线程的线程实现,也就是HandlerThread。HandlerThread对象start后可以获得其Looper对象
并使用这个Looper对象实例化Handler。
6)低版本SDK实现高版本API
自己实现或者@TargetApi annotation
使用@TargetApi annotaion, 使高版本API的代码在低版本SDK不报错
例如:AsyncTask.THREAD_POOL_EXECUTOR, 这个静态变量是API11才有的, 设置project build target 为 2.1.
这个时候eclipse会提示找不到这个变量。只要在方法前面加一个 @TargetApi(11), 这样就不会报错了,程序
已经可以跑在低版本SDK上了。另外在代码上要加一个版本判断是否执行该代码, 例子如下
@TargetApi(11)