为什么要用ContentProvider?它和sql的实现上有什么差别? 使用ContentProvider 可以将数据共享给其他应用,让除本应用之外的应用也可以访问本应用的数据。它的底层是用SQLite 数据库实现的,所以其对数据做的各种操作都是以Sql实现,只是在上层提供的是Uri AIDL的全称是什么?如何工作?能处理哪些类型的数据? AIDL 是一种接口定义语言,用于约束两个进程间的通信规则,供编译器生成代码,实现Android 设备上的进程间通信。 进程之间的通信信息首先会被转换成AIDL 协议消息,然后发送给对方,对方受到 AIDL 协议消息后再转换成相应的对象。 AIDL 支持的类型包括Java 原生类型和String,List,Map,CharSequence,如果使用自定义类型,必须实现Parcelable 接口 启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有什么区别? 从主界面启动一个应用 程序是通过快捷方式直接调mainActivity 启动的,从其他应用程序调用需要隐式的通过Action 或者在 Intent 中需要使用setClasss() ,且要写明包路径. 如何判断是否有SD卡? 在程序中访问SDCard,需要申请访问SDCard 的权限 在AndroidManifest.xml 中加入访问SDCard 的权限如下: < !--在SDCard 中创建与删除文件权限--> < uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> < !-- 往SDCard 写入数据权限 --> < uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> Environment.getExternalStorageState().equals(Enviroment.MEDIA_MOUNTED) Environment.getExternalStorageState() 方法用于获取SDCard 的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。 Android系统中GC什么情况下会出现内存泄露呢? 出现情况 : 1. 数据库的 cursor 没有关闭 2. 构造 adapter 时,没有使用缓存contentview 衍生listview 的优化问题----减少创建view 的对象,充分使用contentview,可以使用一静态类来优化处理 getView 的过程 3. Bitmap 对象不使用时采用recycle() 释放内存 4. Activity 中的对象的生命周期大于Activity 调试方法: DDMS----> HEAPSIZE --->dataobject ---> [Total Size] android 中有哪几种解析xml 的类,它们的原理和区别 DOM 解析 优点: 1. XML 树在内存中完整理存储,因此可以直接修改其数据和结构。 2. 可以通过该解析器随时访问XML树中的任何一个节点. 3. DOM 解析器的 API 在使用上也相对比较简单 缺点: 如果XML 文档体积比较大时,将文档读入内存是非常消耗系统资源的。 使用场景: DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C标准.DOM 是以层次结构组织的节点的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能进行工作.DOM 是基于对象层次结构的。 SAX解析 优点: SAX 对内存的要求比较低,因为它让开发人员自己来决定所要处理的标签。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX 这种扩展能力得到了更好的体现。 缺点: 用SAX 方式进行XML解析时,需要顺序执行,所以很难访问到同一文档中的不同数据。此外,在基于该方式的解析编码过程也相对复杂。 使用场景: 对于含有数据量十分巨大,而又不用对文档的所有数据进行遍历或者分析的时候,使用该方法十分有效。该方法不用将整个文档读入内存,而只需读取到程序所需的文档标签即可. Xmlpull 解析 android 提供了xmlpull api ,xmlpull 和sax 类似,是基于流(stream) 操作文件,然后根据节点事件回调开发者编写的处理程序。因为是基于流的处理,因此xmlpull 和 sax 都比较节约内存资源,不会象DOM 那样要把所有节点以对象树的形式展现在内存中。 xmlpull 比sax 更简明,而且不需要扫描完整个流. res目录有默认几项resource (责任编辑:面试) |
