面试题-Android篇

转载请注明出处,点击此处 查看更多精彩内容。

最近得空,就去一些招聘网站做了些面试题,为方便大家共同学习,Android相关的就在这篇博客里记录一下,以后有空会持续更新,大家有更好的答案也可以留言告诉我。
面试题-Java算法篇 传送门
面试题-Java API篇 传送门

1. Android中五种数据存储方式分别是什么?详细说下他们的特点?

  • 使用SharedPreferences存储数据
    SharedPreferences是Android平台上一个轻量级的存储类,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息,它提供了基础类型(如int,long)和String的保存,SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现。
  • 文件存储数据
    关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。
    文件可用来存放大量数据,如文本、图片、音频等。
    使用文件存储数据可以将数据保存在SD卡,以减少手机内存的占用,访问SD卡中需要以下权限:
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
  • SQLite数据库存储数据
    SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。
    Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。
  • 使用ContentProvider存储数据
    Content Provider是所有应用程序之间数据存储和检索的一个桥梁,它的作用就是使得各个应用程序之间实现数据共享。Android为常见的一些数据提供了ContentProvider(包括音频、视频、图片和通讯录)
    每个Content Providers都会对外提供一个公共的URI(包装成Uri对象),如果应用程序有数据需要共享时,就需要使用Content Providers为这些数据定义一个URI,然后其他的应用程序就可以通过Content Providers传入这个URI来对数据进行操作。URI由3个部分组成:“content://”、数据的路径、标识ID(可选)。
  • 网络存储数据
    前面介绍的几种存储都是将数据存储在本地设备上,除此之外,还可以通过网络来实现数据的存储和获取,我们可以调用WebService返回的数据或是解析HTTP协议实现网络数据交互。
    访问网络需要添加以下权限:
<uses-permission android:name="android.permission.INTERNET" />  

2. SharedPreferences与SQLite数据库的区别

见题1

3. 什么是ANR如何避免它

ANR(Application Not Responding),意思是应用没有响应。
Android通常会在如下情况报出ANR错误:

  • 主线程 (“事件处理线程” / “UI线程”) 在5秒内没有响应输入事件
  • BroadcastReceiver 没有在10秒内完成返回
    因此,为了避免ANR,不要在主线程执行耗时操作,如访问网络(Android4.0以上版本在主线程访问网络会直接报出异常NetworkOnMainThreadException)、数据库存储等,这些耗时的操作可以新开一个线程去执行,如果要在新线程中处理UI,可以使用Handler。

4. android中的动画有哪几类,它们的特点和区别是什么?

5. res/raw与assets目录的区别

相同点:两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。
不同点:

  • res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。
  • res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹。

6. 简述Handler机制原理

Handler 是一个消息分发对象,而消息分发,有赖于消息循环(Looper),每一个线程中最多有一个Looper(子线程如果没有创建Looper,将会使用主线程的Looper,主线程在创建时自动创建一个Looper),Looper 阻塞线程,等待消息构成循环,有了消息,分配到对应的 Handler,让他进一步分发处理。

7. 说说View的刷新机制

在Android的布局体系中,父View负责刷新、布局显示子View;而当子View需要刷新时,则是通知父View来完成。

8. Activity和Task的启动模式有哪些?每种含义是什么?

  • standard:默认的启动模式,每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈。
  • singleTop:如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例;
  • singleInstance:如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例;
  • singleTask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop;

详见:Activity的四种启动模式

SingTask的可以用来退出整个应用:将主Activity设为SingTask模式,然后在要退出的Activity中转到主Activity,然后重写主Activity的onNewIntent函数,并在函数中加上一句finish即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值