android面试(基础篇 9)

来源:互联网 发布:python 判断加载完成 编辑:程序博客网 时间:2024/05/29 02:36

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)


0 0