android面试题整理 itcast/传智播客
32. 系统上安装了多种浏览器,能否指定某浏览器访问指定页面? Intent .setAction(VIEW) setData(\
找到对应的浏览器的意图,传递数据URI , 激活这个意图 Intent intent = new Intent();
// com.android.browser/.BrowserActivity
intent.setClassName(\\ Intent.setdata(uri);
queryintentactivity(); 推广自己产品的操作
33. 对android主线程的运用和理解。 主ui线程不能执行耗时的操作,
34. 对android虚拟机的理解,包括内存管理机制垃圾回收机制。 虚拟机很小,空间很小,谈谈移动设备的虚拟机的大小限制 默认 16M 谈谈加载图片的时候怎么处理大图片的,
垃圾回收,没有引用的对象,在某个时刻会被系统gc掉. System.gc(); 不是立刻去执行垃圾回收. Moblietv 获取300 30K 频道.icon gallery 手机电视. 视频点播. Onstop() 通知gc(); 别的界面图片 白板.
遇到一个不可复现的bug, 不解决 won't fix
35. Framework工作方式及原理,Activity是如何生成一个view的,机制是什么。 反射 , 配置文件
可以讲下activity的源码,比如说 每个activity里面都有window.callback和keyevent.callback,一些回调的接口或者函数吧. 框架把activity创建出来就会调用里面的这些回调方法,会调用activity生命周期相关的方法. setContentView(); 普通的情况:
Activity创建一个view是通过 ondraw 画出来的, 画这个view之前呢,还会调用onmeasure方法来计算显示的大小.
Surfaceview 直接操作硬件 opengl .GLSurfaceView 图像要想被显示到界面上, 需要设备显卡, 显存. 写到显存.
36. android本身的一些限制,比如apk包大小限制,读取大文件时的时间限。 这个问题问的有问题, apk包大小限制不好说, 极品飞车有100M 还是能装到手机上, // apk 资源文件素材.
世面google market 上大程序 主程序 很小 5~10M 下载sdcard 15分钟之内 申请退款
android面试题整理 itcast/传智播客
apk包,精简包, 素材存放在服务器. 游戏程序.
读大文件的时间限制应该是main线程里面的时间限制吧.5秒. 37. 如何加载的音乐信息,如何改善其效率。
Mp3 作者信息 专辑 图片 歌词信息 id3 id3v1 id3v2
Android提供mediascanner,mediaStore等接口, 音乐文件的信息都会存放到系统的数据库表中,可以通过content provider获取,
显示出来,改善效率,是个常见问题, 可以从以下几个方面作答, 分批加载数据, 延时加载数据, 合理使用缓存等... Java虚拟机, 目标, 加快java程序执行速度
预先加载一些 都会的使用的大的class的字节码, 提前加载. 时间换时间 空间换时间
38. ListView如何提高其效率? 复用convertview , 历史的view对象
异步加载数据, 分页加载数据, onscallLinster(); Static class ViewHolder
使用静态的view对象 避免创建过多的view. 把下载后的数据缓存到数据库里 客户端和服务器 协同 作战 . Http 请求
If-modify-since : 检查数据是否更新 1.html 2001年 302 拿缓存 39. 启动应用后,改变系统语言,应用的语言会改变么? 会
40. 启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有什么区别? 区别是根据activity在manifest里面的配置,这个activity可能会放在不同的task栈里面 intent设置的flag flag_new_task 41. Android程序与Java程序的区别?
Android程序用android sdk开发,java程序用javasdk开发.
Android SDK引用了大部分的Java SDK,少数部分被Android SDK抛弃,比如说界面部分,java.awt swing package除了java.awt.font被引用外,其他都被抛弃,在Android平台开发中不能使用。 android sdk 添加工具jar httpclient , pull openGL 将Java 游戏或者j2me程序移植到Android平台的过程中, Android SDK 与Java SDK的区别是很需要注意的地方。 1.6的 不支持 httpUrlconning 获取 last-modified 信息的处理 simpleDataFormat
42. Android中Task任务栈的分配。
假如有三个Activity A B C,A跳到B,然后B跳到C,现在需要从C跳到A如何传递数据而且使效率最高呢? 首先我们来看下Task的定义,Google是这样定义Task的:a task is what the user experiences as an \activities, not a class or an element in the manifest file. 这意思就是说Task实际上是一个Activity栈,通常用户感受的一个Application就是一个Task。从这个定义来看,Task跟Service或者其他Components是没有任何联系的,它只是针对Activity而言的。 Activity有不同的启动模式, 可以影响到task的分配
Task,简单的说,就是一组以栈的模式聚集在一起的Activity组件集合。它们有潜在的前后驱关联,新加
android面试题整理 itcast/传智播客
入的Activity组件,位于栈顶,并仅有在栈顶的Activity,才会有机会与用户进行交互。而当栈顶的Activity完成使命退出的时候,Task会将其退栈,并让下一个将跑到栈顶的Activity来于用户面对面,直至栈中再无更多Activity,Task结束。
事件 点开Email应用,进入收件箱(Activity A) 选中一封邮件,点击查看详情(Activity B) 点击回复,开始写新邮件(Activity C) 写了几行字,点击选择联系人,进入选择联系人界面(Activity D) 选择好了联系人,继续写邮件 写好邮件,发送完成,回到原始邮件 点击返回,回到收件箱 退出Email程序
如上表所示,是一个实例。从用户从进入邮箱开始,到回复完成,退出应用整个过程的Task栈变化。这是一个标准的栈模式,对于大部分的状况,这样的Task模型,足以应付,但是,涉及到实际的性能、开销等问题,就会变得残酷许多。
比如,启动一个浏览器,在Android中是一个比较沉重的过程,它需要做很多初始化的工作,并且会有不小的内存开销。但与此同时,用浏览器打开一些内容,又是一般应用都会有的一个需求。设想一下,如果同时有十个运行着的应用(就会对应着是多个Task),都需要启动浏览器,这将是一个多么残酷的场面,十个Task栈都堆积着很雷同的浏览器Activity, 是多么华丽的一种浪费啊。
于是你会有这样一种设想,浏览器Activity,可不可以作为一个单独的Task而存在,不管是来自那个Task的请求,浏览器的Task,都不会归并过去。这样,虽然浏览器Activity本身需要维系的状态更多了,但整体的开销将大大的减少,这种舍小家为大家的行为,还是很值得歌颂的 standard\。
standard模式, 是默认的也是标准的Task模式,在没有其他因素的影响下,使用此模式的Activity,会构造一个Activity的实例,加入到调用者的Task栈中去,对于使用频度一般开销一般什么都一般的Activity而言,standard模式无疑是最合适的,因为它逻辑简单条理清晰,所以是默认的选择。 而singleTop模式,基本上于standard一致,仅在请求的Activity正好位于栈顶时,有所区别。此时,配置成singleTop的Activity,不再会构造新的实例加入到Task栈中,而是将新来的Intent发送到栈顶Activity中,栈顶的Activity可以通过重载onNewIntent来处理新的Intent(当然,也可以无视...)。这个模式,降低了位于栈顶时的一些重复开销,更避免了一些奇异的行为(想象一下,如果在栈顶连续几个都是同样的Activity,再一级级退出的时候,这是怎么样的用户体验...),很适合一些会有更新的列表Activity展示。一个活生生的实例是,在Android默认提供的应用中,浏览器(Browser)的书签Activity(BrowserBookmarkPage),就用的是singleTop。
singleTask,和singleInstance,则都采取的另辟Task的蹊径。
标志为singleTask的Activity,最多仅有一个实例存在,并且,位于以它为根的Task中。所有对该Activity的请求,都会跳到该Activity的Task中展开进行。singleTask,很象概念中的单件模式,所有的修改都是基于一个实例,这通常用在构造成本很大,但切换成本较小的Activity中。最典型的例子,还是浏览器
Task栈(粗体为栈顶组件) A AB ABC ABCD ABC AB A null android面试题整理 itcast/传智播客
应用的主Activity(名为Browser...),它是展示当前tab,当前页面内容的窗口。它的构造成本大,但页面的切换还是较快的,于singleTask相配,还是挺天作之合的。
singleInstance显得更为极端一些。在大部分时候singleInstance与singleTask完全一致,唯一的不同在于,singleInstance的Activity,是它所在栈中仅有的一个Activity,如果涉及到的其他Activity,都移交到其他Task中进行。这使得singleInstance的Activity,像一座孤岛,彻底的黑盒,它不关注请求来自何方,也不计较后续由谁执行。在Android默认的各个应用中,很少有这样的Activity,在我个人的工程实践中,曾尝试在有道词典的快速取词Activity中采用过,
是因为我觉得快速取词入口足够方便(从notification中点选进入),并且会在各个场合使用,应该做得完全独立。
大的apk 拆成 很多小的apk
●Activity的 android:taskAffinity=\属性 姻缘关系
1.配置后 当启动这个activity时就先去找有没有activity的亲和力属性相同 有就加入这个
activity所在的任务中没有就新开任务
1.intent包含FLAG_ACTIVITY_NEW_TASK标记
2.activity元素启用了allowTaskReparenting属性. true
2.affinity起作用需要的条件而者具备一个:
43. 在Android中,怎么节省内存的使用,怎么主动回收内存? 尽量多使用内部类 提高程序效率 Bean private public 回收已经使用的资源, 合理的使用缓存
合理设置变量的作用范围 application 对象 //未来的某一段时间执行
System.gc();
44. 不同工程中的方法是否可以相互调用? 可以,列举aidl访问远程服务的例子.
45. 在Android中是如何实现判断区分电话的状态,去电,来电、未接来电? Day8 showAddressService.java
46. dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念
Dvm的进程是dalivk虚拟机进程,每个android程序都运行在自己的进程里面, 每个android程序系统都会给他分配一个单独的liunx uid(user id), 每个dvm都是linux里面的一个进程.所以说这两个进程是一个进程.
47. sim卡的EF 文件有何作用 Sim卡相关的东西,没接触过 文件规范.
48. 如何判断是否有SD卡?
配置文件中有sd卡的权限, 通过environment的静态方法,
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { 49. 嵌入式操作系统内存管理有哪几种, 各有何特性。 页式,段式,段页,等 ?
50. 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?
实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式
android面试题整理 itcast/传智播客
操作系统。主要用于工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而android是基于linux内核的,因此属于软实时。 硬实时. 火星探测车. Vxworks 软实时. 调度算法
51. 一条最长的短信息约占多少byte?
中文70(包括标点),英文160,160个字节 这个说法不准确, 要跟手机制式运营商等信息有关. 做实验,看源码
ArrayList
sms.sendTextMessage(phoneNumber, null, msg, pi, null); }
52. Linux中跨进程通信的几种方式 。 linux编程
# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 # 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
# 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。 # 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。 # 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。 # 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
53. 谈谈对Android NDK的理解。
native develop kit 只是一个交叉编译的工具 .so
2.为什么用ndk,ndk的优点 ,缺点,
我们项目中那些地方用到了ndk, c opengl
54. 谈谈Android的优点和不足之处。
1、开放性,开源 ophone 阿里云( 完全兼容android) 乐os 2、挣脱运营商束缚
3、丰富的硬件选择 mtk android 4、不受任何限制的开发商 5、无缝结合的Google应用
1.什么时候用ndk, 实时性要求高,游戏,图形渲染,
opencv (人脸识别) , ffmpeg , rmvb mp5 avi 高清解码. ffmpeg, opencore.