2018-7月Android试题整理

2018-7月试题整理


1.当Activity被销毁时,如何保存它原来的状态

  • 实现Activity的onSaveInstanceState()方法
  • 实现Activity的onSaveInstance()方法
  • 实现Activity的onInstanceSate()方法
  • 实现Activity的onSaveSate()方法

解析:
当你的程序中某一个Activity A在运行时,主动或被动地运行另一个新的Activity B,这个时候A会执行onSaveInstanceSate()。B完成后又会来找A,这个时候有两种情况,
一是:A被回收
二是:A没有被回收
被回收的A就要重新调用onCreate()方法,不同于直接启动的是这会OnCreate()里是带上了参数saveInstanceSate;而没有被回收的就直接执行onResume(),跳过onCreate()了。


2.对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行?

  • onPause()
  • onbCreate()
  • onResume()
  • onStart()

解析:
onCreate():表示Activity正在被创建,在这里可以做一些初始化的工作
onRestart():表示Activity正在重新启动,当当前Activity从不可见重新变成可见状态
onStart():表示Activity正在被启动,已经可见,但不在前台,无法交互
onResume():表示Activity已经可见,并且出现在前台可以交互
onPause():表示Activity正在停止,在这里可以做一些存储数据,停止动画等工作,但不能太耗时,因为必须onPause执行完成后新的Activity才能Resume
onStop():表示Activity即将停止,可以进行一些稍微轻量级的回收工作,不能太耗时。
onDestory():表示Activity即将被销毁,可以进行一些回收工作和最终的资源释放。

内存严重不足时,onStop()不会被执行,但是OnPause()是保证执行的


3.下面哪种进程最重要,最后被销毁?

  • 服务进程
  • 后台进程
  • 前台进程
  • 可见进程

解析:
重要性依次是:前台进程,可见进程,服务进程,后台进程,空进程。
前台进程是Android系统中最重要的进程,是与用户正在交互的进程
可见进程是指部分程序界面能够被用户看见,却不在前台与用户交互


4.下面是属于GLSurFaceView特性的是?

  • 管理一个surface,这个surface就是一个特殊的内存,能直接排版到Android的视图view上
  • 管理一个EGL display,它能让openGL把内容渲染到上述的surface上
  • 让渲染器在独立的线程里运作,和UI线程分离
  • 可以直接从内存或者DMA等硬件接口取得图像数据

解析:
一个GLSurface类,具有以下特点。

  1. 管理一个平面,这个平面是一个特殊的内存块,它可以和Android视图系统混合
  2. 管理一个EGL显示,它能够让OpenGL渲染到一个平面
  3. 接收一个用户提供的实际显示的Renderer对象
  4. 使用一个专用线程去渲染从而和UI线程解耦
  5. 支持on-demand和连续的渲染
  6. 可选的包追踪/或者错误检查这个渲染器的OPENGL调用

5.What is the difference between parcelable and serializable()?

  • Parcels are light wight seralzable.It is perfred to use parcels for marshaling objects into byte streams
  • Sreializable objects are faster to transfer when compared to parcelable
  • Android app heavliy depends on Serialization concept tomarshal objects
  • Android uses Linux IPC driver to transfer data between two processes.

解析:
Parcelablle和Serializeble区别:

  1. Serializable在序列化的时候会产生大量临时变量,从而引起频繁的GC
  2. 在使用内存的时候,Parcelable比Serializable性能高,所以推荐使用Parecelable
  3. Parcelable不能使用在要将数据库存储在磁盘的情况上,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下,尽管Serializable效率低,但此时还是建议使用Serializable

6.在android中使用RadioButton时,要想实现互斥的选择需要用的组件是

  • ButtonGroup
  • RadioButtons
  • CheckBox
  • RadioGroup

解析:
RadioButton和CheckBox的区别:

  1. 单个RadioButton在选中后,通过点击无法变为未选中;单个CheckBox在选中后,通过点击可以变为未选中
  2. 一组RadioButton,只能同时选中一个;一组CheckBox能同时选中多个
  3. RadioButton在大部分UI框架中默认都以圆形表示;CheckBox则都以矩形表示

RadioButton和RadioGroup的关系:

  1. RadioButton表示单个圆形单选框,而RadioGroup是可以容纳多个Radio Button的容器。
  2. 每个RadioGroup中的RadioButton同时只能有一个被选中
  3. 不同的RadioGroup中的RadioButton互不相干,即如果组A中有一个选中了,组B中依然可以有一个被选中
  4. 大部分场合下,一个RadioGroup中至少有2个RadioButton
  5. 大部分场合下,一个RadioGroup中的RadioButton默认会有一个被选中,并建议你将他放在RadioGroup中的起始位置

7.下列关于Android数字签名描述错误的是

  • 所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序
  • Android程序包使用的数字证书可以是自签的,不需要一个权威的数字证书机构签名认证
  • 如果要正式发布一个Android程序,可以使用集成开发工具生成的调试证书来发布
  • 数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期,如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能

8.在多个应用中读取共享存储数据时,需要用到的query方法,是哪个对象的方法

  • ContentResolver
  • ContentProvider
  • Cursor
  • SQLiteHelper

解析:
ContentResolver和ContentProvider是一对,一个运行在提供数据端(Provider),一个运行在调用端(Resolver)。使用的时候利用Resolver来调用Provider的方法(query,insert,update等),然后provider再进行数据查询
Cursor是游标,返回结果集的,provider的query可以返回这种类型的结果

无论ContentProvider还是ContentResolver都有各自的insert(),delete(),update(),query()四个方法。
使用ContentResolver是用来操作数据的,即是通过ContentResolver操作ContentProvider所暴露的数据,即使我们还没有开发自己的ContentProvider,但Android系统的应用已经提供了大量ContentProvider,允许开发者来操作这些ContentProvider所暴露的数据
使用ContentResolver操作数据的步骤很简单:

  1. 调用Activity的getContentResolver()获取ContentResolver对象
  2. 根据需要调用ContentResolver的insert(0,dalete(),update(),query()方法操作数据就行

而为了操作系统提供的ContentResolver,只需要了解该ContentProvider的Uri就行。


9. 下列选项那个不是Activity启动的方法

  • startActivity()
  • startActivityFromChild
  • goToActivity
  • startActivityForResult

10.RemoteView在哪些功能中使用

  • Toast
  • AppWidget
  • ListView
  • Notification

解析:
RemoteView会用在两个地方:AppWidget和Notification
官方对他的定义是:RemoteView描述一个view,而这个view是在另一个进程显示的,它inflate与layout资源文件,并且提供了可以修改view内容的一些简单基础的操作
从这个定义可以知道RemoteView是用来描述一个跨进程显示的view


11.将一个Activity设置成窗口的样式,只需要设置Theme

  • T
  • F

将一个Activity设置成窗口的样式有两种方式
AndroidManifest.xml中加上:

  1. android:theme=@android:style/Theme.Dialog
  2. android:theme=@android:style/Theme.Translucent//就变成半透明

12.下面关于Android中定义style和theme的描述正确的是?

  • 都可以减少重复属性设置
  • style可以作用在Activity上
  • Theme类可以继承
  • 一个TextView的style中定义了textColor属性,TextView本身也设置textColor属性,那么TextView本身定义的优先级较高

解析:
style和theme本质上就是同一个东西,xml格式完全相同,只是用在activity上就叫theme,用在view上就叫style,唯一的区别就是style里头控制的各个属性了,某些属性是只针对Activity才能生效的(View没有标题栏,状态栏,导航栏,但是Activity内部却有一个继承自View的Decorview)所以style可以作用在Activity上,但是theme却不能反过来作用在view上


13.在嘀嘀打车点击到支付宝支付,出现密码输入框,到此时相关的Activity会发生的生命周期回调依次为?

  • Onpause() ondestroy() oncreate() onresume()
  • ondestroy() oncreate() onstart() onresume()
  • onstop() ondestroy() oncreate() onstart()
  • onpause() oncreate() onstart() onresume()

解析:
首先
滴滴失去焦点,onPause()
支付宝onCreate() - > onStart() - > onResume()
当被启动的activity主题是透明(即原Activity仍然可见)的时候,原Activity不会执行其onStop()方法。
第三方接入的支付宝支付界面是不会完全遮盖原activity的。


14.下列对AsyncTask的描述,哪些是正确的

  • onProgressUpdate()方法是在主线程中执行的
  • 如果同时执行多个AsyncTask的话,他们默认是串行执行的
  • AsyncTask的实例应在UI thread中创建实例
  • AsyncTask内部默认的线池是通过java.util.concurrentExecuttors.newFixedThreadPool创建的

解析:
在Android中主线程是UI线程,一切的界面操作都是在主线程中完成的,如果在非线程重才操作ui将会报错
同时执行多个AsynvTask默认是串行执行的
AsynvTask必须在UI线程中创建
内部默认的线程是由SerialExecuto创建


15.下列属于android常用的跨进程通信工具有:

  • broadcas
  • AIDL
  • handler

解析:
handler是跨线程

你可能感兴趣的:(android,问题总结)