Skip to content

Commit

Permalink
添加 Android 面试题
Browse files Browse the repository at this point in the history
  • Loading branch information
ShiHaoyang committed Sep 6, 2016
1 parent 0ee09a8 commit 68f0fb6
Showing 1 changed file with 36 additions and 0 deletions.
36 changes: 36 additions & 0 deletions android/questions.md
Original file line number Diff line number Diff line change
Expand Up @@ -249,3 +249,39 @@ TextView通常用来显示普通文本,但是有时候需要对其中某些文
可以看到 **入口Activity其实是先于Application实例化,只是onCreate之类的流程,先于Activity的流程**。另外需要`scheduleLaunchActivity`,在`ApplicationThreaad`中,对应AMS管理Activity生命周期的方法都以`scheduleXXXActivity`,ApplicationThread在Binder线程中,它会向主线程发送消息,ActivityThread的Handler会调用相应的handleXXXActivity方法,然后会执行performXXXActivity方法,最终调用Activity的onXXX方法

***

#### Include、Merge、ViewStub的作用

**Include**:布局重用

- `<include />`标签可以使用单独的layout属性,这个也是必须使用的。

- 可以使用其他属性。`<include />`标签若指定了ID属性,而你的layout也定义了ID,则你的layout的ID会被覆盖,解决方案。

-`<include />`标签中所有的`android:layout_*`都是有效的,**前提是必须要写layout_width和layout_height两个属性**

- 布局中可以包含两个相同的include标签

**Merge**:减少视图层级,多用于替换FrameLayout或者当一个布局包含另一个时,`<merge/>`标签消除视图层次结构中多余的视图组。

>例如:你的主布局文件是垂直布局,引入了一个垂直布局的include,这是如果include布局使用的LinearLayout就没意义了,使用的话反而减慢你的UI表现。这时可以使用<merge/>标签优化。
**ViewStub**:需要时使用。优点是当你需要时才会加载,使用他并不会影响UI初始化时的性能。需要使用时调用`inflate()`

***

#### Asset目录与res目录的区别

- **assets 目录**:不会在`R.java`文件下生成相应的标记,assets文件夹可以自己创建文件夹,必须使用`AssetsManager`类进行访问,存放到这里的资源在运行打包的时候都会打入程序安装包中,

- **res 目录**:会在R.java文件下生成标记,这里的资源会在运行打包操作的时候判断哪些被使用到了,没有被使用到的文件资源是不会打包到安装包中的。

> res/raw 和 assets文件夹来存放不需要系统编译成二进制的文件,例如字体文件等
> res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹
***

#### System.gc && Runtime.gc

`System.gc``Runtime.gc`是等效的,在`System.gc`内部也是调用的`Runtime.gc`**调用两者都是通知虚拟机要进行gc,但是否立即回收还是延迟回收由JVM决定**。两者唯一的区别就是一个是类方法,一个是实例方法。

0 comments on commit 68f0fb6

Please sign in to comment.