7-5日Android试题整理

1.在同一线程中android:Handler和android:MessageQueue的数量对应关系是怎样的?
  • 1(Handler):1(MessageQueue)
  • N(Handler):1(MessageQueue)
  • 1(Handler):N(MessageQueue)
  • N(Handler):N(MessageQueue)

解析:

  1. Handler必须在Looper.prepare()之后才能创建。
  2. Looper与当前线程关联,并且管理着一个MessageQueue。
  3. Message是实现Parcelable接口的类
  4. 以一个线程为基准,它们的数量关系是Handler(N):Looper(1):MessageQueue(1):Thread(1)

简单说:在同一个线程中肯定会调用一个Looper.prepare(),其中生成一个MessageQueue。而代码中可以New出多个Handler发送各自的Message到这个MessageQueue中,最后会调用msg.target.dispatch中这个target来捕获自己发送的message,所以是:N(Handler)对应1(Message Queue)


2.以下适合在客户端做数据持久化存储的数据有
  • redis
  • localStorage
  • sessionStorage
  • userData

解析:
redis是一个数据库,干扰项
LocalStorage和SessionStorage一样都是用来存储客户端临时信息的对象
不同的是:localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。sessionStorage生命周期为当前窗口或者标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就会被清空。


3.下面不可以退出Activtiy的是?
  • finish()
  • 抛出异常强制退出
  • System.exit(0)
  • onStop()

解析:
A:finish()方法就是退出activity
B:activity中出现异常,会弹出对话框,强制退出当前activity的
C:System.exit(0),这是退出所有activity使用的
D:onStop()只是activity一个周期方法,此时还没有退出,只有走到onDestory()才退出。只是生命周期中的一个,不会退出。


4.下面哪种进程最重要,最后被销毁?
  • 服务进程
  • 后台进程
  • 前台进程
  • 可见进程

解析:
重要性依次是:前台进程,可见进程,服务进程,后台进程,空进程,所以销毁的顺序为逆方向。
也可以理解成,前台是指与用户交互,执行完onResume的;可见是指onStart的


5.下列哪些情况,系统可能会弹出ANR对话框
  • 在Activity中,Main线程消息队列中的消息在5s内没得到响应
  • 在Service中,onStartCommand()方法执行超过5s
  • 在BroadcastReceiver中,onReceiver()方法执行时间超过10s
  • 在启动的新线程中,run()方法执行时间超过5s

    解析:

    在Android中,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框成作应用程序无响应(ANR)对话框,用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”

Activity——5秒
Broadcast——10秒
Service——20秒
会报出ANR,都是在主线程中运行的


6.如果在Activity中对一些资源以及状态进行保存操作,最好是在生命周期的哪个函数中进行?
  • onPause()
  • onCreate()
  • onResume()
  • onStart()

onPause()中对资源进行保存
也可以说是暂停的时候保存,才能保存用户最终的使用状态。


7.Android DVM的进程和Linux的进程,以下说法是错误的是?
  • 它们都是进程的一种
  • DVM是Android的虚拟机
  • Linux的进程是程序的具体实现,是执行程序的过程
  • DVM中可以创建多个进程来处理应用间的同步问题

解析:
每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例,每一个DVM都是在Linux中的一个进程(即每个Android应用存储对应一条Dalvik进程)


8.有关Activity生命周期描述正确的是?
  • 设置Activity的android:screenOrientation=”portrait”属性时,切换屏幕横纵方向时不会重新调用各个生命周期,只会执行onConfigurationChanged方法
  • 未设置Activity的android:configChanges属性,切换屏幕横纵方向时会重新调用onCreate()方法
  • 当再次启动某个launchMode设置为singletask的Activity,它的onNewIntent(0方法会被触发
  • 用户正在操作某个Activity,这是如果其它应用程序需要内存,系统会将用户当前操作的Activity强制关闭

解析:
A:设置Activity的android:screenOrientation=”portrait”属性时,无法切换横竖屏,因此不但不会重新调用各个生命周期方法,而且onConfigurationChanged方法也不会执行
B:未设置Activity的android:configChanges属性,API上这样说:“the activity will be restarted if any of these configuration changes happen in the system”
C:launchMode设置为singletask的时候,通过Intent启动一个Activity,如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会在调用通常情况下我们处理数据的onCreate方法,而是调用onNewIntent方法。
D:用户正在操作某个Activity,这是如果其它应用程序需要内存,此时的Activity是Foreground process,应该按照Empty process,Background process,Service process,Visible process顺序kill,最后才是前台进程。


9.下列关于数据持久化的描述正确的事?
  • 在内存中缓存多个Bitmap对象是一种数据持久化方法
  • SQLite数据库文件可以保存在SD卡中
  • ContentProvider的主要目的是为了将Android应用的数据持久化
  • 数据持久化就是将内存的数据保存到外存

来自官方文档

Android数据持久化有五种方法

  1. SharedPreferences
  2. 内部存储(例如通过openDileOutput()打开一个文件输入输出流)
  3. SQLite
  4. 网络
  5. 外部存储
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值