没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
18页
Android技术面试整理-葵花宝典Android技术面试整理-葵花宝典Android技术面试整理-葵花宝典Android技术面试整理-葵花宝典Android技术面试整理-葵花宝典Android技术面试整理-葵花宝典Android技术面试整理-葵花宝典Android技术面试整理-葵花宝典Android技术面试整理-葵花宝典Android技术面试整理-葵花宝典Android技术面试整理-葵花宝典Android技术面试整理-葵花宝典Android技术面试整理-葵花宝典Android技术面试整理-葵花宝典Android技术面试整理-葵花宝典
资源推荐
资源详情
资源评论
前 19 题为常考题目!!(版本号:201108141031)
1
、
Android 的四大组件是哪些,它们的作用?
答:Activity:Activity 是 Android 程序与用户交互的窗口,是 Android
构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的
事情,妥善管理生命周期以及一些跳转逻辑
service:后台服务于 Activity,封装有一个完整的功能逻辑实现,接受
上层指令,完成相关的食物,定义好需要接受的 Intent 提供同步和异步
的接口
Content Provider:是 Android 提供的第三方应用数据的访问方案,可
以派生 Content Provider 类,对外提供数据,可以像数据库一样进行选
择排序,屏蔽内部数据的存储细节,向外提供统一的借口模型,大大简
化上层应用,对数据的整合提供了更方便的途径
BroadCast Receiver:接受一种或者多种 Intent 作触发事件,接受相关
消息,做一些简单处理,转换成一条 Notification,统一了 Android 的
事件广播模型
2、 请介绍下 Android 中常用的五种布局。
常用五种布局方式,分别是:FrameLayout(框架布局),LinearLayout
(线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布
局),TableLayout(表格布局)。
一、FrameLayout:所有东西依次都放在左上角,会重叠,这个布局比较简单,
也只能放一点比较简单的东西。二、LinearLayout:线性布局,每一个
LinearLayout 里面又可分为垂直布局(android:orientation="vertical")
和水平布局(android:orientation="horizontal" )。当垂直布局时,每一行
就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个
元素依次向右排列。三、AbsoluteLayout:绝对布局用 X,Y 坐标来指定元素的
位置,这种布局方式也比较简单,但是在屏幕旋转时,往往会出问题,而且
多个元素的时候,计算比较麻烦。四、RelativeLayout:相对布局可以理解为
某一个元素为参照物,来定位的布局方式。主要属性有:相对于某一个元素
android:layout_below 、 android:layout_toLeftOf 相对于父元素的地方
android:layout_alignParentLeft、android:layout_alignParentRigh;五 、
TableLayout:表格布局,每一个 TableLayout 里面有表格行
TableRow,TableRow 里面可以具体定义每一个元素。每一个布局都有自己适
合的方式,这五个布局元素可以相互嵌套应用,做出美观的界面。
3、 android 中的动画有哪几类,它们的特点和区别是什么
答:两种,一种是 Tween 动画、还有一种是 Frame 动画。Tween 动画,这种
实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种
Frame 动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似
电影。
4、 android 中有哪几种解析 xml 的类?官方推荐哪种?以及它们
的原理和区别。
答:XML 解析主要有三种方式,SAX、DOM、PULL。常规在 PC 上开发我们使
用 Dom 相对轻松些,但一些性能敏感的数据库或手机上还是主要采用 SAX
方式,SAX 读取是单向的,优点:不占内存空间、解析属性方便,但缺点就是
对于套嵌多个分支来说处理不是很方便。而 DOM 方式会把整个 XML 文件加载
到内存中去,这里 Android 开发网提醒大家该方法在查找方面可以和 XPath
很好的结合如果数据量不是很大推荐使用,而 PULL 常常用在 J2ME 对于节点
处理比较好,类似 SAX 方式,同样很节省内存,在 J2ME 中我们经常使用的
KXML 库来解析。
5、 ListView 的优化方案
答:1、如果自定义适配器,那么在 getView 方法中要考虑方法传进来的参数
contentView 是否为 null,如果为 null 就创建 contentView 并返回,如果不
为 null 则直接使用。在这个方法中尽可能少创建 view。
2、给 contentView 设置 tag(setTag()),传入一个 viewHolder 对象,
用于缓存要显示的数据,可以达到图像数据异步加载的效果。
3、如果 listview 需要显示的 item 很多,就要考虑分页加载。比如一共要显示
100 条或者更多的时候,我们可以考虑先加载 20 条,等用户拉到列表底部的
时候再去加载接下来的 20 条。
6、 请介绍下 Android 的数据存储方式。
答:使用 SharedPreferences 存储数据;文件存储数据;SQLite 数据库存储
数据;使用 ContentProvider 存储数据;网络存储数据;
Preference,File , DataBase 这三种方式分别对应的目录
是/data/data/Package Name/Shared_Pref, /data/data/Package
Name/files, /data/data/Package Name/database 。
一:使用 SharedPreferences 存储数据
首先说明 SharedPreferences 存储方式,它是 Android 提供的用来存储一些
简单配置信息的一种机制,例如:登录用户的用户名与密码。其采用了 Map
数据结构来存储数据,以键值的方式存储,可以简单的读取与写入,具体实
例如下:
void ReadSharedPreferences(){
String strName,strPassword;
SharedPreferences user = getSharedPreferences(“user_info”,0);
strName = user.getString(“NAME”,””);
strPassword = user getString(“PASSWORD”,””);
}
void WriteSharedPreferences(String strName,String strPassword){
SharedPreferences user = getSharedPreferences(“user_info”,0);
uer.edit();
user.putString(“NAME”, strName);
user.putString(“PASSWORD” ,strPassword);
user.commit();
}
数据读取与写入的方法都非常简单,只是在写入的时候有些区别:先调用
edit()使其处于编辑状态,然后才能修改数据,最后使用 commit()提交修改
的数据。实际上 SharedPreferences 是采用了 XML 格式将数据存储到设备中,
在 DDMS 中的 File Explorer 中的/data/data/<package
name>/shares_prefs 下。使用 SharedPreferences 是有些限制的:只能在
同一个包内使用,不能在不同的包之间使用。
二:文件存储数据
文件存储方式是一种较常用的方法,在 Android 中读取/写入文件的方法,与
Java 中实现 I/O 的程序是完全一样的,提供了 openFileInput()和
openFileOutput()方法来读取设备上的文件。具体实例如下:
String fn = “moandroid.log”;
FileInputStream fis = openFileInput(fn);
FileOutputStream fos = openFileOutput(fn,Context.MODE_PRIVATE);
三:网络存储数据
网络存储方式,需要与 Android 网络数据包打交道,关于 Android 网络数据
包的详细说明,请阅读 Android SDK 引用了 Java SDK 的哪些 package?。
四:ContentProvider
1、ContentProvider 简介
当应用继承 ContentProvider 类,并重写该类用于提供数据和存储数据的方
法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,
但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数
据,需要进行文件操作读写数据;采用 sharedpreferences 共享数据,需要
使用 sharedpreferences API 读写数据。而使用 ContentProvider 共享数据的
好处是统一了数据访问方式。
2、Uri 类简介
Uri 代表了要操作的数据,Uri 主要包含了两部分信息:1.需要操作的
ContentProvider ,2.对 ContentProvider 中的什么数据进行操作,一个 Uri
由以下几部分组成:
1.scheme:ContentProvider(内容提供者)的 scheme 已经由 Android 所
规定为:content://…
2.主机名(或 Authority):用于唯一标识这个 ContentProvider,外部调用
者可以根据这个标识来找到它。
3.路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务
而定,如下:
要操作 contact 表中 id 为 10 的记录,可以构建这样的路径:/contact/10
要操作 contact 表中 id 为 10 的记录的 name 字段, contact/10/name
要操作 contact 表中的所有记录,可以构建这样的路径:/contact?
要操作的数据不一定来自数据库,也可以是文件等他存储方式,如下:
要操作 xml 文件中 contact 节点下的 name 节点,可以构建这样的路径:
/contact/name
如果要把一个字符串转换成 Uri,可以使用 Uri 类中的 parse()方法,如下:
Uri uri =
Uri.parse("content://com.changcheng.provider.contactprovider/contac
t")
3、UriMatcher、ContentUrist 和 ContentResolver 简介
因为 Uri 代表了要操作的数据,所以我们很经常需要解析 Uri ,并从 Uri 中获
取数据。Android 系统提供了两个用于操作 Uri 的工具类,分别为 UriMatcher
和 ContentUris 。掌握它们的使用,会便于我们的开发工作。
UriMatcher:用于匹配 Uri,它的用法如下:
1.首先把你需要匹配 Uri 路径全部给注册上,如下:
//常量 UriMatcher.NO_MATCH 表示不匹配任何路径的返回码(-1)。
UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//如果 match()方法匹配
content://com.changcheng.sqlite.provider.contactprovider /contact 路
径,返回匹配码为 1
uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”,
“contact”, 1);//添加需要匹配 uri,如果匹配就会返回匹配码
//如果 match()方法匹配
content://com.changcheng.sqlite.provider.contactprovider/contact/23
0 路径,返回匹配码为 2
uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”,
“contact/#”, 2);//#号为通配符
2.注册完需要匹配的 Uri 后,就可以使用 uriMatcher.match(uri)方法对输入
的 Uri 进行匹配,如果匹配就返回匹配码,匹配码是调用 addURI()方法传入
的第三个参数,假设匹配
content://com.changcheng.sqlite.provider.contactprovider/contact 路
径,返回的匹配码为 1。
ContentUris:用于获取 Uri 路径后面的 ID 部分,它有两个比较实用的方法:
withAppendedId(uri, id)用于为路径加上 ID 部分
parseId(uri)方法用于从路径中获取 ID 部分
ContentResolver:当外部应用需要对 ContentProvider 中的数据进行添加、
删除、修改和查询操作时,可以使用 ContentResolver 类来完成,要获取
ContentResolver 对象,可以使用 Activity 提供的 getContentResolver()方
法。ContentResolver 使用 insert、delete、update、query 方法,来操作数据。
7、 activity 的启动模式有哪些?是什么含义?
答:在 android 里,有 4 种 activity 的启动模式,分别为:
“standard” (默认)
“singleTop”
“singleTask”
“singleInstance”
它们主要有如下不同:
1. 如何决定所属 task
“standard” ”和 singleTop”的 activity 的目标 task,和收到的 Intent 的发送
者在同一个 task 内,除非 intent 包括参数 FLAG_ACTIVITY_NEW_TASK 。
如果提供了 FLAG_ACTIVITY_NEW_TASK 参数,会启动到别的 task 里。
“singleTask” ”和 singleInstance”总是把 activity 作为一个 task 的根元素,
他们不会被启动到一个其他 task 里。
2. 是否允许多个实例
“standard” ”和 singleTop”可以被实例化多次,并且存在于不同的 task 中,
剩余17页未读,继续阅读
资源评论
小正太浩二
- 粉丝: 183
- 资源: 5909
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功