1. Intent 的几种有关 Activity 启动的方式有哪些,你了解每个含义吗?
Intent 的一些标记有 FLAG_ACTIVITY_BROUGHT_TO_FRONT 、FLAG_ACTIVITY_CLEAR_TOP、 FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET、 FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS、FLAG_ACTIVITY_MULTIPLE_TASK 和 FLAG_ACTIVITY_NEW_TASK 等。每种含义大家看 SDK 文档和具体跑下这样你的记 忆会更深刻些。
2. Activity 和 Task 的启动模式有哪些? 每种含义是什么?
有关在 AndroidManifest.xml 中的 android:launchMode 定义,主要有 standard、singleTop、 singleTask 和 singleInstance,关于Activity 的启动模式,参 考: http://blog.csdn.net/feng88724/archive/2011/05/11/6412638.aspx
3. 通过 Intent 传递一些二进制数据的方法有哪些?
1). 使用 Serializable 接口实现序列化,这是 Java 常用的方法。
2). 实现 Parcelable 接口,这里 Android 的部分类比如 Bitmap 类就已经实现了,同时 Parcelable 在 Android AIDL 中交换数据也很常见的。
4. 能说下 Android 应用的入口点吗?
真正的 Android 入口点是 application 的 main,你可以看下 androidmanifest.xml 的包含关 系就清楚了。可以没有 Activity 但是必须有 Application
5. Android 都有哪些 XML 解析器,都熟练掌握吗?
这里 XmlPull、SAX 和 DOM 相信做过 Web 开发的都已经滚瓜烂熟了。
6. SQLite 支持事务吗? 添加删除如何提高性能?
SQLite 作为轻量级的数据库,比 MySQL 还小,但支持 SQL 语句查询,提高性能可以考 虑通过原始经过优化的 SQL 查询语句方式处理。
7. Android Service 和 Binder、AIDL 你都熟练吗?
作为 Android 重要的后台服务,这些每个 Android 开发者都应该掌握,这也算是和 Java SE 最大的不同了,具体的实例大家可以查看 Android 音乐播放器的源代码 Music.git 中的, 这里不再赘述。
8. 你用过哪款 Android 手机,有哪些优点和不足,相对于 iPhone 或 Symbian 又有哪些优 缺点?
把这个作为面试题也是考察下,可以大概了解到它对 Android 的了解程度,多移动开发 的认识。 ===================================================================== ==============.
9.请描述下 Activity 的生命周期。
创建 oncreate - 启动 onstart–恢复 onResume–暂停 onPause–结束 onEnd–销毁 onDestroy
10. 如果后台的 Activity 由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
在”暂停 onPause”状态将数据保存。
11.如何将一个 Activity 设置成窗口的样式。
设置 Theme。
12. 如何退出 Activity?如何安全退出已调用多个 Activity 的 Application? 请介绍下 Android 中常用的五种布局。
线性布局 LinearLayout,相对布局 RelativeLayout 表单布局 TableLayout, 绝对布局 AbsLayout(已淘汰) 帧布局 FrameLayout
13. 请介绍下 Android 的数据存储方式。
Preference,文件,数据库 SQlite,网络存储
14. 请介绍下 ContentProvider 是如何实现数据共享的。 如何启用 Service,如何停用 Service。
启动: Context.startService()
and Context.bindService(). 关闭:Context.stopService(). Service.stopSelf() or Service.stopSelfResult() 9. 注册广播有几种方式,这些方式有何优缺点?请谈谈 Android 引入广播机制的用意。
15请解释下在单线程模型中 Message、Handler、Message Queue、Looper 之间的关系。
16.AIDL 的全称是什么?如何工作?能处理哪些类型的数据?
17.请解释下 Android 程序运行时权限与文件系统权限的区别。(Edited by Sodino)
18.系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。
19. 有一个一维整型数组 int[]data 保存的是一张宽为 width,高为 height 的图片像素值信 息。请写一个算法,将该图片所有的白色不透明(0xffffffff)像素点的透明度调整为 50%。
20.你如何评价 Android 系统?优缺点。 (这一题重复了)
优势: 一、开放性三、丰富的硬件选择五、无缝结合的 Google 应用支持 缺点: 一、安全和隐私 二,开发商自定义,不够统一四、同类机型用户减少 =========================
21、什么是 ANR 如何避免它?
http://blog.csdn.net/Zengyangtech/archive/2010/11/21/6025671.aspx
ANR定义
在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择让程序继续运行,但是,他们在使用你的应用程序时,并不希望每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样,系统不会显示ANR给用户。
如何来避免:
考虑上面的ANR定义,让我们来研究一下为什么它会在Android应用程序里发生和如何最佳构建应用程序来避免ANR。
Android应用程序通常是运行在一个单独的线程(例如,main)里。这意味着你的应用程序所做的事情如果在主线程里占用了太长的时间的话,就会引发ANR对话框,因为你的应用程序并没有给自己机会来处理输入事件或者Intent广播。
因此,运行在主线程里的任何方法都尽可能少做事情。特别是,Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者以数据库操作为例,通过异步请求的方式)来完成。然而,不是说你的主线程阻塞在那里等待子线程的完成——也不是调用Thread.wait()或是Thread.sleep()。替代的方法是,主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。以这种方式设计你的应用程序,将能保证你的主线程保持对输入的响应性并能避免由于5秒输入事件的超时引发的ANR对话框。这种做法应该在其它显示UI的线程里效仿,因为它们都受相同的超时影响。
IntentReceiver执行时间的特殊限制意味着它应该做:在后台里做小的、琐碎的工作如保存设定或者注册一个Notification。和在主线程里调用的其它方法一样,应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。但不再是在子线程里做这些任务(因为BroadcastReceiver的生命周期短),替代的是,如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个Service。顺便提及一句,你也应该避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。如果你的应用程序在响应Intent广播时需要向用户展示什么,你应该使用Notification Manager来实现。
一般来说,在应用程序里,100到200ms是用户能感知阻滞的时间阈值。因此,这里有一些额外的技巧来避免ANR,并有助于让你的应用程序看起来有响应性。
如果你的应用程序为响应用户输入正在后台工作的话,可以显示工作的进度(ProgressBar和ProgressDialog对这种情况来说很有用)。
特别是游戏,在子线程里做移动的计算。
如果你的应用程序有一个耗时的初始化过程的话,考虑可以显示一个Splash Screen或者快速显示主画面并异步来填充这些信息。在这两种情况下,你都应该显示正在进行的进度,以免用户认为应用程序被冻结了。
22、什么情况会导致 Force Close ?如何避免?能否捕获导致其的异常?
23、Android 本身的 api 并未声明会抛出异常,则其在运行时有无可能抛出 runtime 异常, 你遇到过吗?诺有的话会导致什么问题?如何解决?
会有运行时异常,运行时异常无需捕捉
24、简要解释一下 activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver
这个问题问的很普遍,自己多看看吧。
25、IntentService 有何优点?
26. android:paddingLeft 与 android:layout_marginLeft 的区别
当按钮分别设置以上两个属性时,得到的效果是不一样的。 android:paddingLeft="30px" 按钮上设置的内容离按钮左边边界 30 个像素
android:layout_marginLeft="30px" 整个按钮离左边设置的内容 30 个像素
27. Android 动画有哪几种?描述一下 两种。
Tween 动画和 Frame 动画。 Tween 动画主要是透明度、尺寸伸缩、旋转、位移等 效果。 Frame 动画可以理解成 gif,一帧一帧的显示图片。比较常用的有滚动条效果。
28. 对 Intent、Activity、广播、Service 等的理解。
29. 哪些情况下会发生 ANR ? 怎么对应? (这个问题也重复了) Application Not Response。
30. 隐式、显式 Intent 的区别 ·
显式意图 通过名字指明目标组件(这个组件名字字段 component name field, 前面提到过, 有一个数值集)。既然组件名称通常不为其他应用程序的开发者所了解,显式意图典型的 被用作应用程序的内部消息-例如一个活动启动一个附属服务或姊妹活动。 隐式意图 不命名目标组件(组件名称字段为空)。隐式意图经常用来激活其他应用程序的组件。 (这一块参考 Intent 说明,可以同时看一下 Notepad 的例子,帮助理解,个人感觉很重要!)
31.返回键与 Home 键区别?
back 键默认行为是 finish 处于前台的 Activity 的即 Activity 的状态为 Destroy 状态为止,再 次启动该 Activity 是从 onCreate 开始的(不会调用 onSaveInstanceState 方法)。Home 键默认 是 stop 前台的 Activity 即状态为 onStop 为止而不是 Destroy,若再次启动它,会调用 onSaveInstanceState 方法,保持上次 Activity 的状态则是从 OnRestart 开始的---->onStart()-->onResume()。
32. Android 中如何传递二进制数据?
33. ANR 是什么?哪些情况下会发生?开发时如何寻找 ANR?
34. 解释 AIDL 4. SAX、DOM、PULL 解析 xml 的原理,以及各自优缺点
35. DIP、DPI 分别是什么?
36.java 线程的 sleep(),wait(),notify(),yield()方法的区别?
1.sleep()使线程休眠一段时间,一段时间结束后,线程进入可执行状态,但并不是立即执 行,只是在被排程器调用的时候才执行。在休眠期间,并不释放所持有的“锁”; 2.wait()使线程休眠一段时间,若设置参数,时间到时,线程就自动进入可执行状态。若 没有,则需要 notify()方法去调用。注意:wait()方法和 notify()方法都时针对 this 对象的, 调用 wait()方法后,会释放加在对象上的“锁”。 3.yield()使线程放弃执行的权利,进入可执行状态,也就意味着线程在 yield()方法后,有 可能又执行。使用 yield()方法,线程并不释放自己锁持有的“锁”。
37. 基本的 UI 控件和布局文件
文本控件 - TextView - EditText 按钮控件 - Button - ImageButton 状态开关按钮 - ToggleButton 单选与复选按钮 - CheckBox - RadioButton 图片控件 - ImageView 时钟控件 - AnalogClock - DigitalClock 日期与时间选择控件 - DataPicker - TimePicker 布局文件: 布局文件: LinearLayout 和 RelativeLayout 共有属性: 共有属性: java 代码中通过 btn1 关联次控件 android:id="@+id/btn1" 控件宽度 android:layout_width="80px" //"80dip"或"80dp" 或 android:layout_width =“wrap_content” android:layout_width =“match_parent” 控件高度 android:layout_height="80px" //"80dip"或"80dp" 或 android:layout_height =“wrap_content” android:layout_height =“match_parent” 控件排布 android:orientation="horizontal” android:orientation="vertical“ 控件间距 android:layout_marginLeft="5dip" //距离左边 距离左边 android:layout_marginRight="5dip" //距离右边 距离右边 android:layout_marginTop="5dip" //距离上面 距离上面 android:layout_marginRight="5dip" //距离下面 距离下面 控件显示位置
android:gravity="center" //left,right, top, bottom android:gravity="center_horizontal" android:layout_gravity 是本元素对父元素的重力方向。 是本元素对父元素的重力方向。 android:layout_gravity 属性则设置控件本身相对于父控件的显示位置 android:gravity 是本元素所有子元素的重力方向。 是本元素所有子元素的重力方向。 android:layout_gravity="center_vertical" android:layout_gravity="left" android:layout_gravity="left|bottom" TextView 中文本字体 android:text="@String/text1" //在 string.xml 中定义 text1 的值 在 android:textSize="20sp" android:textColor=”#ff123456” android:textStyle="bold" // 普 通 ( normal ) 斜 体 ( italic ) 粗 斜 体 , , (bold_italic) ) 定义控件是否可见 android:visibility=”visible” //可见 可见 //不可见,但是在布局中占用的位置还在 不可见, android:visibility=”invisible” 不可见 android:visibility=”gone” //不可见,完全从布局中消失 不可见, 不可见 定义背景图片 android:background="@drawable/img_bg" //img_bg 为 drawable 下的一 张图片 seekbar 控件背景图片及最大值 android:progressDrawable="@drawable/seekbar_img" android:thumb="@drawable/thumb" android:max = "60" 中有效: 仅在 RelativeLayout 中有效: 在父亲布局的相对位置 android:layout_alignParentLeft="true" //在布局左边 在布局左边 android:layout_alignParentRight="true" //在布局右边 在布局右边 android:layout_alignParentTop="true" //在布局上面 在布局上面 android:layout_alignParentBottom="true " //在布局的下面 在布局的下面 在某个控件的相对位置 android:layout_toRightOf="@id/button1" //在控件 button1 的右边,不仅 的右边, 在控件 仅是紧靠着 android:layout_toLeftOf="@id/button1" //在控件 button2 的左边, 的左边, 在控件 不仅仅 是紧靠着 android:layout_below="@id/button1 " //在控件 button1 下面,不仅仅是 下面, 在控件 正下方 android:layout_above=“@id/button1” //在控件 button1 下面 不仅仅是正下 下面,不仅仅是正下 在控件 方 定义和某控件对奇 android:layout_alignTop=”@id/button1” //和控件 button1 上对齐 和控件
android:layout_alignBottom=”@id/button1” //和控件 button1 下对齐 和控件 android:layout_alignLeft=”@id/button1” //和控件 button1 左对齐 和 android:layout_alignRight=”@id/button1” //和控件 button2 右对齐 和控件 android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:layout_centerInParent="true" 仅在 LinearLayout 中有效 设置控件在一排或一列中所占比例值 android:layout_weight="1" //水平居中 水平居中
38、Android dvm 的进程和 Linux 的进程 应用程序的进程是 、 的进程, 否为同一个概念的虚拟机。 DVM 指 dalivk 的虚拟机。 每一个 Android 应用程序都在 它自己的进程中运行, 它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实 中的一个进程, 例。而每一个 DVM 都是在 Linux 中的一个进程, 所以说可以 认为是同一个概念。 认为是同一个概念。
39、sim 卡的 EF 文件有何作用 、
卡的文件系统有自己规范, 主要是为了和手机通讯, sim 卡的文件系统有自己规范, 主要是为了和手机通讯, cos, (Ei EF(E sim 本 身可以有自己的操作系统 cos, (Eiementary File) EF 基本文件就是作存储并和手机通讯用的 基本文件就是作存储并和手机通讯用的 就是作存储并和手
40、嵌入式操作系统内存管理有哪几种, 各有何特性 、嵌入式操作系统内存管理有哪几种,页式,段式,段页, MMU(内存管理单元 单元) 页式,段式,段页,用到了 MMU(内存管理单元),虚拟空 间等技术
41、什么是嵌入式实时操作系统 Android 操作系统属于实时 、什么是嵌入式实时操作系统, 操作系统吗?
嵌入式实时操作系统是指当外界事件或数据产生时, 嵌入式实时操作系统是指当外界事件或数据产生时,能 够接受并以足够快的速度予以处理, 够接受并以足够快的速度予以处理,其处理的结果又能在规 定的时间之作出快速响应, 控制所有实时任务协调一致运 定的时间之作出快速响应,并控制所有实时任务协调一致运 的嵌入式操作系统。主要用于工业控制、军事设备、 行的嵌入式操作系统。主要用于工业控制、军事设备、航空 航天等领域对系统的响应时间有苛刻的要求, 航天等领域对系统的响应时间有苛刻的要求,这就需要使用 实时系统。又可分为软实时和硬实时两种, 软实时和硬实时两种 实时系统。又可分为软实时和硬实时两种,而 android 是基 内核的,因此属于软实时。 于 linux 内核的,因此属于软实时。
42、一条最长的短信息约占多少 byte(字节 、 字节)? 字节
70(包括标点 包括标点) 160, 个字节。 中文 70(包括标点),英文 160,160 个字节。
43、 android 中的动画有哪几类,它们的特点和区别是什么 、 中的动画有哪几类,它们的特点和区别是什么?
两种, 两种, 动画、这种实现方式可以使视图组件移动 放大、 使视图组件移动、 Tween 动画、这种实现方式可以使视图组件移动、放大、缩 小以及产生透明度的变化; 小以及产生透明度的变化; 动画。传统的动画方法, Frame 动画。传统的动画方法,通过顺序的播放排列好的图 片来实现,类似电影。 片来实现,类似电影。
44、handler 机制的原理 、
来满足线程间的通信。 andriod 提供了 Handler 和 Looper 来满足线程间的通信。 当 Android 系 统 启 动 时 , 就 创 建 了 一 个 Looper 与 对象, 并且与当前线程相绑定. MessageQueue 对象, 并且与当前线程相绑定. 当在主线程使 并创建该对象时,他会获得该Looper。 用 Handler 并创建该对象时,他会获得该Looper。 对象发送消息有两种方式:sendMessag Handler 对象发送消息有两种方式:sendMessag e... / Psot...
但是最终调用的都是sendMessageAtTim 但是最终调用的都是 sendMessageAtTim e方法,该方法主要作用有两个: 方法,该方法主要作用有两个: 指定目标 Handler 对象 把消息放入到消息队列当中
中使用loop方法用于不断的循环监听消息队列, loop方法用于不断的循环监听消息队列 Looper 中使用loop方法用于不断的循环监听消息队列, 看源码可知,监听消息队列并不是另外开一个线程来实现, 看源码可知,监听消息队列并不是另外开一个线程来实现, loop方法主要是,对消息进行分发,最终交给目标Ha loop方法主要是,对消息进行分发,最终交给目标Ha 方法主要是 ndler并由HandleMessage ndler 并由HandleMessage方法最终处 并由 HandleMessage方法最终处 理.
45、说说 mvc 模式的原理,它在 android 中的运用 、 模式的原理,
MVC(Model_view_contraller)” 模 型 _ 视 图 _ 控 制 器 ” 。 MVC 应用程序总是由这三个部分组成。Event(事件 会导致 应用程序总是由这三个部分组成。 事件)会 事件 Controller 来改变 Model 或 View, 或者同时改变两者。 , 或者同时改变两者。 只要 Controller 改变了 Models 的数据或者属性, 的数据或者属性, 所有依赖的 View 都会自动更新。 类似的, 只要 Controller 改变了 View, View 都会自动更新。 类似的, , 会 中获取数据来刷新自己。 从潜在的 Model 中获取数据来刷新自己。
View 重绘(刷新)和内存泄露的的问题 重绘(刷新)
46. View 的刷新 的刷新:
在 需 要 刷 新 的 地 方 , 使 用 handle.sendmessage 发 送 信 息 , 然 后 在 handle 的 getmessage 里面执行 invaliate 或者 postinvaliate. 2. GC 内存泄露 出现情况: 出现情况 1.数据库的 cursor 没有关闭 数据库的 2.构造 adapter 时,没有使用缓存 contentview 构造 没有使用缓存
的优化问题-----减少创建 view 的对象 充分使用 contentview,可以使 的对象,充分使用 衍生 listview 的优化问题 减少创建 可以使 的过程/ 用一静态类来优化处理 getview 的过程 3.Bitmap 对象不使用时采用 recycle()释放内存 释放内存 4.activity 中的对象的生命周期大于 activity 调试方法: 调试方法 DDMS==> HEAPSZIE==>dataobject==>[Total Size] 还有其他问题,大家欢迎提出阿 可以是整体架构的 还有其他问题 大家欢迎提出阿,可以是整体架构的 还有这个 Hal 层. 大家欢迎提出阿 可以是整体架构的,还有这个
47、Activity 的生命周期