- 相关推荐
安卓面试总结
Android面试总结
1. Activity和Task的启动模式有哪些 ?
在android里,有4种activity的启动模式分别为:
1. standard(默认)
“standard”对于每一个启动Intent都会生成一个activity的新实例,每个Instance处理一个单个的Intent。
2. singleTop
“singleTop”的activity如果在目标task的栈顶的话,则不生成新的该activity的实例,直接使用栈顶的实例,否则,生成该activity的实例。
3. singleTask
"singleTask"的 activity 允许别的 activities 位于其所在的task中。该activity位于活动栈stack根部,其他activity并且可以在这个栈中运行。
4. singleInstance
"singleInstance"的activity不允许其它的activitise成为其所在的 task的一部分。无论在什么情况下“singleInstance”都会独占一个task。
2. Intent的几种有关Activity启动的方式有哪些,你了解每个含义吗?
FLAG_ACTIVITY_MULTIPLE_TASK
FLAG_ACTIVITY_SINGLE_TOP FLAG_ACTIVITY_NEW_TASK
3.通过Intent传递一些二进制数据的方法有哪些?
1). 使用Serializable接口实现序列化,这是Java常用的方法。
2). 实现Parcelable接口,这里Android的部分类比如Bitmap类就已经实现了,同时Parcelable在Android AIDL中交换数据也很常见的。
4. 能说下Android应用的入口点吗
真正的Android入口点是application的main,你可以看下http://www.oh100.com的包含关系就清楚了。 可以没有Activity但是必须有Application。
5. Android都有哪些XML解析器,都熟练掌握吗
XML解析有三种方式,SAX,DOM,PULL。常规在PC上开发我们使用DOM相对轻松些,DOM方式的解析会把整个XML加载到内存中进行解析。但一些性能敏感的数据库或者手机主要采用SAX方式,SAX读取是单向的,优点是不占内存空间、解析属性方便,但对于嵌套多个分支来处理很不方便。PULL常常用在J2ME对于节点处理比较好,类似SAX方式,同样很节省内存。
6. SQLite支持事务吗 添加删除如何提高性能
SQLite支持事务。SQLite作为轻量级的数据库,比MySQL还小,但支持SQL语句查询,提高性能可以考虑通过原始经过优化的SQL查询语句方式处理。
7. 谈谈对Binder的理解
8. 你用过哪款Android手机,有哪些优点和不足,相对于iPhone或Symbian又有哪些优缺点
1. 请描述下Activity的生命周期。
创建 oncreate -启动onstart – 恢复 onResume – 暂停 onPause – 结束 onStop – 销毁onDestroy
2. 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
在系统回收或者用户调用finish方法,都会销毁Activity,此时会调用onDestroy方法,利用onDestroy方法保存Activity状态.
3. 如何将一个Activity设置成窗口的样式。
在Mainfest文件中配置android:theme = “@android:style/http://www.oh100.com”
4. 如何退出Activity?如何安全退出已调用多个Activity的Application?
单个的Activity,调用finish、killProcess()、http://www.oh100.com()方法退出。 多个Activity,在2.2中调用新的方法,killBackgroundProcesses(),需要权限 http://www.oh100.com
5. 请介绍下Android中常用的五种布局。
LinearLayout: 线性布局(常用)
将组件按照属性设置的水平或者垂直方向顺序排序。
FrameLayout: 层叠布局
将组件显示屏幕的左上角,后面的组件覆盖前面的组件。
RelativeLayout: 表格布局
组件的位置是相对于它所依赖的组件的位置。
TableLayout: 表格布局
TableRow指定一行,每个组件表示一列。
AbsoluteLayout: 坐标布局
组件相对于左上角的位置而定 x=”?px” y=”?px”
6. 请介绍下Android的数据存储方式。
有四种存储方式:SharedPreferences、NetWork网络存储、文件、SQLite数据库。
http://www.oh100.com一种轻量级的键值存储方式,其存储的数据必须是基本数据类型.存储的数据以XML的形式存在,存储在/data/data/包名/shared_prefs目录下。
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="gender">男性</string> <string name="name">jadde</string>
</map>
http://www.oh100.com网络存储
http://www.oh100.com上的文件存储可以存储在手机的内存或者外部的存储卡上。文件存储的操作和java中对文件存储的操作差不多。默认情况下,在/data/data/<包名>/files/目录下创建文件,且生成一个文件输出流(FileOutputStream)对象。openFileOutput(String name,int mode)方法对文件进行读写。name表示文件名,mode表示对文件的操作。
4.SQLite轻型数据库是android平台内置的一个嵌入式数据库。可以高效率的处理数据较为复杂的关系型数据,应用程序创建的数据库文件存储在/data/data/包名/database目录下,应用程序之间不能相互访问。
7. 请介绍下ContentProvider是如何实现数据共享的。
一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProviders是以类似数据库中表 的方式将数据暴露,也就是说ContentProvider就像一个“数据库”。那么外界获取其提供的数据,也就应该与从数据库中获取数据的操作基本一 样,只不过是采用URI来表示外界需要访问的“数据库”。 ContentProvider负责:组织应用程序的数据、向其他应用程序提供数据; ContentResolver负责:获取ContentProvider提供的数据的增删改查等。
8. 如何启用Service,如何停用Service。
Service的启动分两种:http://www.oh100.com(应用停,服务不停)和http://www.oh100.com(应用停,服务停)。启动了Service后运行onCreate,之后调用onStartCommand(处理Intent),最后调用stopService或stopSelf停止service.
9. 注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。
1.动态注册:调用方法http://www.oh100.com()
IntentFilter intentFilter = new IntentFilter();
http://www.oh100.com(action);
registerReceiver(BroadcastReceiver,intentFilter);
2.静态注册:在http://www.oh100.com的<receiver>标签
<receiver android:name=”BootReceiver”>
<intent-filter>
指明接收哪种广播---这里是开机启动的广播
<action android:name=”http://www.oh100.com”/> </intent-filter>
</receiver>
动态注册的广播优点灵活,手机处于关机状态时,不在监听广播。静态注册的广播的优点是比较方便和易读。
引入BroadcastReceiver的用意:
第一从MVC的角度考虑(应用程序内),就是为了实现移动或者说嵌入式设备上的MVC架构,它们之间有时候是一 种相互依存的关系,有时候又是一种补充关系,引入广播机制可以方便几大组件的信息和数据交互。
第二:程序间互通消息(例如在自己的应用程序内监听系统来电)
第三:效率上(参考UDP的广播协议在局域网的方便性)
第四:设计模式上(反转控制的一种应用,类似监听者模式)。
10. 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系。 Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。
Handler:处理者,负责Message发送和处理,使用Handler时,需要实现handlerMessage(Message msg)进行特定的处理,例如更新UI等。
Message Queue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。当然,存放Message(不是真正的保存),而是将Message以链表的方式串起来的,等待Looper的抽取。
Looper:消息泵,不断地从MessageQueue中抽取Message执行,因此一个MessageQueue需要一个Looper.
他们的关系:
Looper和MessageQueue 是一一对应的关系,创建一个Looper的同时,会创建一个MessageQueue。Handler和他们只是简单的集聚关系,即Handler里面会引用当前线程里特定的Looper和MessageQueue.多个handler可以共享同一个Looper和MessageQueue了,这些Handler运行在同一个线程里。
11. AIDL的全称是什么?如何工作?能处理哪些类型的数据?
AIDL的全称是Android Interf-ace Define Language
12. 请解释下Android程序运行时权限与文件系统权限的区别。(Edited by Sodino)
13. 系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。
14. 有一个一维整型数组int[]data保存的是一张宽为width,高为height的图片像素值信息。请写一个算法,将该图片所有的白色不透明(0xffffffff)像素点的透明度调整为50%。
15. 你如何评价Android系统?优缺点。
优点:1、学习的开源性;2、软件兼容比较好;3、软件发展迅速;4、界面布局好 缺点:1、版本过多;2、现有软件少;3、上午性能差
1、 什么是ANR 如何避免它?
ANR(Application Not Responding): 应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应的对话框.
避免ANR:Android应用程序通常运行在一个单独的线程里面,称为主线程,所以在主线程里面少做一些耗时长的程序,而是利用子线程来操作一些繁琐的事情,用Handler把子线程处理的消息返回给主线程。
2、什么情况会导致Force Close ?如何避免?能否捕获导致其的异常?
3、Android本身的api并未声明会抛出异常,则其在运行时有无可能抛出runtime异常,你遇到过吗?诺有的话会导致什么问题?如何解决?
4、简要解释一下activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver
5、IntentService有何优点
1. android:paddingLeft与android:layout_marginLeft的区别
当按钮分别设置以上两个属性时,得到的效果是不一样的。
android:paddingLeft="30px"
按钮上设置的内容(例如图片)离按钮左边边界30个像素
android:layout_marginLeft="30px"
整个按钮离左边设置的内容30个像素
2. Android 动画有哪几种?
动画分为两种类型的动画:渐变动画(Tweened Animations)和逐帧播放动画(Frame_by_Frame Animations)。
渐变动画里主要有:Alpha淡入淡出、Scale缩放效果、Rotate旋转效果、Translate移动效果,还可以利用AnimationSet 进行多动画的组合。
逐帧播放动画的制作步骤:
1. 在xml中配置<animation-list „>
<item android:drawable=”..” android:duration=”500”/>
„
</animation-list>
2. 在ImageView设置背景资源 .setBackgroundResource(http://www.oh100.com)
3. 通过ImageView得到AnimationDrawable
4. .star()执行动画
5. 对Intent、Activity、BroadcastReceiver、Service等的理解。
Intent是一个将执行动作抽象的描述,由Intent来协助完成android各个组件之间的通讯好比Activity之间的桥梁。Intent的成员有:
Action : ACTION_VIEW, ACTION_EDIT, ACTION_MAIN
Data : 封装的数据,以Uri格式表示
Category : 标志动作执行的分类,例如CATEGORY_LAUNCHER
Type : MINI
Component : 标明Intent指向的class
Extras : 用于在Intent中携带一些 键-值数据对 信息
5. 隐式、显式Intent的区别
Intent解析机制主要是通过查找已注册在http://www.oh100.com中的所有IntentFilter及其中定义的Intent,最终找到匹配的Intent。在这个解析过程中,Android是通过Intent的action、type、category这三个属性来进行判断的,判断方法如下:如果Intent指明定了action,则目标组件的IntentFilter的action列表中就必须包含有这个action,否则不能匹配;如果Intent没有提供type,系统将从data中得到数据类型。和action一样,目标组件的数据类型列表中必须包含Intent的数据类型,否则不能匹配。
显式解析,调用setComponent(Component)或setClass(Context,Class)设置Intent指定的运行类。
Intent intent = new Intent(this, http://www.oh100.com);
http://www.oh100.com("name", peoples[position]);
startActivity(intent);
隐式解析,未直接标注组件,但是需要提供足够的信息以便系统能够确定运行哪个class。
Intent intent = new Intent();
http://www.oh100.com(http://www.oh100.com);
http://www.oh100.com(http://www.oh100.com);
startActivity(intent);
【安卓面试总结】相关文章:
安卓岗位职责04-20
安卓工程师岗位职责05-18
安质部个人总结05-10
安防员工作总结04-19
质安部工作总结04-09
安环部工作总结03-29
安防业务出差报告总结05-18
国-家-安-全小组总结05-19
国-家-安-全宣传总结05-19
国-家-安-全防范总结05-19