欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android面试题及其答案(一)

程序员文章站 2022-05-06 16:51:00
...

AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程。
优点:
l  简单,快捷
l  过程可控       
缺点:
l 在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来

Handler 异步实现时,涉及到 Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动Thread(子线程)thread(子线程)运行并生成Message-Looper获取Message并传递给Handler,Handler逐个获取Looper中的Message,并进行UI变更。
优点:
l  结构清晰,功能定义明确
l  对于多个后台任务时,简单,清晰
缺点:
l  在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)

json vs xml
XML定义
扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。

JSON定义
JSON(JavaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。JSON采用兼容性很高的、完全
独立于语言文本格式,同时也具备类似于C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)体系的行为。这些特性使JSON成为理想的数据交换语言。

共同优点:
都是文本表示的数据格式,可以跨平台、跨系统交换数据

(1).可读性方面。
JSON和XML的数据可读性基本相同,JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,XML可读性较好些。
(2).可扩展性方面。
XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。
(3).编码难度方面。
XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。从总体来看,XML比较适合于标记文档,而JSON却更适于进行数据交换处理。
(4).解码难度方面。
XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。
(5).流行度方面。
XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。
(6).解析手段方面。
JSON和XML同样拥有丰富的解析手段。
(7).数据体积方面。
JSON相对于XML来讲,数据的体积小,传递的速度更快些。
(8).数据交互方面。
JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。
(9).数据描述方面。
JSON对数据的描述性比XML较差。
(10).传输速度方面。
JSON的速度要远远快于XML。

sqlite操作
请继承SQLiteOpenHelper实现:
1).创建一个版本为1的“diaryOpenHelper.db”的数据库,
2).同时创建一个 “diary” 表(包含一个_id主键并自增长,topic字符型100
长度, content字符型1000长度)
3).在数据库版本变化时请删除diary表,并重新创建出diary表。

public class DBHelper extends SQLiteOpenHelper {
	public final static String DATABASENAME = “diaryOpenHelper.db”;
	public final static int DATABASEVERSION = 1;
	//创建数据库
	public DBHelper(Context context,String name,CursorFactory factory,int version)
	{
		super(context, name, factory, version);
	}
	//创建表等机构性文件
	public void onCreate(SQLiteDatabase db)
	{
		String sql =”create table diary”+
		“(“+
		“_id integer primary key autoincrement,”+
		“topic varchar(100),”+
		“content varchar(1000)”+
		“)”;
		db.execSQL(sql);
	}
	//若数据库版本有更新,则调用此方法
	public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)
	{
		String sql = “drop table if exists diary”;
		db.execSQL(sql);
		this.onCreate(db);
	}
}

android 中有哪几种解析xml的类?官方推荐哪种?以及它们的原理和区别。
XML解析主要有三种方式,SAX、DOM、PULL。

DOM解析XML文件会将XML文件的所有内容以文档树方式存放在内存中,然后使用DOM API遍历XML树,检索所需的数据,主要用于PC机,该方法在查找方面可以和XPath很好的结合,如果数据量不是很大推荐使用。
优点:使用DOM解析XML的代码比较直观,比基于SAX的实现更加简单。缺点:须将XML文件所有内容存放在内存中,所以消耗内存大,不适用Android等移动设备。

SAX解析XML文件采用的是事件驱动,也就是说,他读取是单向的,并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读取到的字符是否符合XML语法中的某部分,如果符合就会触发事件,其实就是一些回调方法,然后进行判断处理。
优点:解析速度快,占用内存少,解析属性方便,适用于Android等移动设备。缺点:对于嵌套多个分支来说处理不是很方便。

PULL解析器是Android内置解析XML文件的解析器,运行方式类似于SAX解析,只是产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。PULL解析器对节点处理比较好,同样也很省内存,官方推挤使用PULL解析器解析XML文件,而且Android系统本身用到的XML文件内部也是使用PULL解析器进行解析的。
SAX、PULL还有一点区别,PULL解析时用了一个while循环,随时可以跳出,而SAX不是,SAX是只要解析了,就必须解析完成。

转载于:https://my.oschina.net/abcijkxyz/blog/724085