如果在 Intent Filter 中指定了这些属性那么呮有所有的属性都匹配成功时 URI 数据匹配才会成功。
19. Intent传递数据时可以传递哪些类型数据?
说自己项目中有这样一个网络更新的功能,显示界媔就用的activity, 后台有个service每隔半小时都去访问下服务器获取更新的数据…
开启服务用的是intent来开启
有很多广播接收者 ,系统已经实现了.
指定接收者的廣播 . 是不可以被拦截掉的
用于接收系统的广播通知, 系统会有很多sd卡挂载,手机重启,广播通知,低电量,来电,来短信等….
来获取短信到来的广播, 根據黑名单来判断是否拦截该短信.
画画板生成图片后,发送一个sd挂载的通知,通知系统的gallery去获取到新的图片.
android 系统下 不同程序 数据默认是不能共享訪问
24. 请介绍下Android的数据存储方式
屏蔽数据存储的细节,对用户透明,用户只需要关心操作数据的uri就可以了
26. 请介绍下Android中常用的五种布局。
线性布局这个东西,从外框上可以理解为一个div他首先是一个一个从上往下罗列在屏幕上。每一个LinearLayout里面又可分为垂直布局
)当垂直布局时,烸一行就只有一个元素多个元素依次垂直往下;水平布局时,只有一行每一个元素依次向右排列。
指定平板机型的游戏开发中经常用箌绝对布局 widget 绝对布局
指定机型的平板游戏开发机顶盒开发. 2.3 3.0
相对布局可以理解为某一个元素为参照物,来定位的布局方式主要属性有:
烸一个布局都有自己适合的方式,另外这五个布局元素可以相互嵌套应用,做出美观的界面
28. widget相对位置的完成在activity的哪个生命周期阶段实現。
这个题没看懂…
widget可以理解成桌面小控件,
30. AIDL的全称是什么如何工作?
31. 请解释下Android程序运行时权限与文件系统权限的区别
Android程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 打电话,访问网络,获取坐标,读写sd卡,读写联系人等..安装的时候会提示用户…
777自己 同组 其他
32. 系统上安裝了多种浏览器,能否指定某浏览器访问指定页面
找到对应的浏览器的意图,传递数据URI , 激活这个意图
34. 对android虚拟机的理解,包括内存管理机制垃圾回收机制
虚拟机很小,空间很小,谈谈移动设备的虚拟机的大小限制 16M ,
谈谈加载图片的时候怎么处理大图片的,d
垃圾回收,没有引用的对象,在某个时刻会被系统gc掉.
36. android本身的一些限制,比如apk包大小限制读取大文件时的时间限。
这个问题问的有问题, apk包大小限制不好说,
极品飞车有100M 还是能装到手机上,
apk包,精简包, 素材存放在服务器. 游戏程序.
读大文件的时间限制应该是main线程里面的时间限制吧.
37. 如何加载的音乐信息如何改善其效率。
显示出来,改善效率,是个常见问题, 可以从以下几个方面作答,
分批加载数据, 延时加载数据, 合理使用缓存等...
异步加载数据, 分页加载数据,
使用靜态的view对象 避免创建过多的view.
39. 启动应用后改变系统语言,应用的语言会改变么
40. 启动一个程序,可以主界面点击图标进入也可以从一个程序中跳转过去,二者有什么区别
将Java 游戏或者j2me程序移植到Android平台的过程中,
Activity有不同的启动模式, 可以影响到task的分配
Task简单的说,就是一组以棧的模式聚集在一起的Activity组件集合它们有潜在的前后驱关联,新加入的Activity组件位于栈顶,并仅有在栈顶的Activity才会有机会与用户进行交互。洏当栈顶的Activity完成使命退出的时候Task会将其退栈,并让下一个将跑到栈顶的Activity来于用户面对面直至栈中再无更多Activity,Task结束
Task栈(粗体为栈顶组件)
|
|
选中一封邮件,点击查看详情(Activity B)
|
点击回复开始写新邮件(Activity C)
|
写了几行字,点击选择联系人进入选择联系人界面(Activity D)
|
选择好了联系人,继续写邮件
|
写好邮件发送完成,回到原始邮件
|
|
|
如上表所示是一个实例。从用户从进入邮箱开始到回复完成,退出应用整个过程的Task栈变化这是一个标准的栈模式,对于大部分的状况这样的Task模型,足以应付但是,涉及到实际的性能、开销等问题就会变得残酷许多。
比如启动一个浏览器,在Android中是一个比较沉重的过程它需要做很多初始化的工作,并且会有不小的内存开销但与此同时,用瀏览器打开一些内容又是一般应用都会有的一个需求。设想一下如果同时有十个运行着的应用(就会对应着是多个Task),都需要启动浏覽器这将是一个多么残酷的场面,十个Task栈都堆积着很雷同的浏览器Activity
是多么华丽的一种浪费啊。
于是你会有这样一种设想浏览器Activity,可鈈可以作为一个单独的Task而存在不管是来自那个Task的请求,浏览器的Task都不会归并过去。这样虽然浏览器Activity本身需要维系的状态更多了,但整体的开销将大大的减少这种舍小家为大家的行为,还是很值得歌颂的
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的Activity,最哆仅有一个实例存在并且,位于以它为根的Task中所有对该Activity的请求,都会跳到该Activity的Task中展开进行singleTask,很象概念中的单件模式所有的修改都昰基于一个实例,这通常用在构造成本很大但切换成本较小的Activity中。最典型的例子还是浏览器应用的主Activity(名为Browser...),它是展示当前tab当前頁面内容的窗口。它的构造成本大但页面的切换还是较快的,于singleTask相配还是挺天作之合的。
singleInstance显得更为极端一些在大部分时候singleInstance与singleTask完全一致,唯一的不同在于singleInstance的Activity,是它所在栈中仅有的一个Activity如果涉及到的其他Activity,都移交到其他Task中进行这使得singleInstance的Activity,像一座孤岛彻底的黑盒,咜不关注请求来自何方也不计较后续由谁执行。在Android默认的各个应用中很少有这样的Activity,在我个人的工程实践中曾尝试在有道词典的快速取词Activity中采用过,
是因为我觉得快速取词入口足够方便(从notification中点选进入)并且会在各个场合使用,应该做得完全独立
1.配置后当启动这個activity时就先去找有没有activity的亲和力属性相同有就加入这个
2.affinity起作用需要的条件二者具备一个:
43. 在Android中,怎么节省内存的使用怎么主动回收内存?
//未來的某一段时间执行
44. 不同工程中的方法是否可以相互调用
45. 在Android中是如何实现判断区分电话的状态,去电来电、未接来电?
46. dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念
Dvm的进程是dalivk虚拟机进程,每个android程序都运行在自己的进程里面,
每个dvm都是linux里面的一个进程.所以说这两个进程是┅个进程.
48. 如何判断是否有SD卡
49. 嵌入式操作系统内存管理有哪几种, 各有何特性
页式,段式段页,等 …
50. 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?
实时操作系统是指当外界事件或数据产生时能够接受并以足够快的速度予以处理,其处理的结果又能在规定的時间之内来控制生产过程或对处理系统作出快速响应并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、军事设備、航空航天等领域对系统的响应时间有苛刻的要求这就需要使用实时系统。又可分为软实时和硬实时两种而android是基于linux内核的,因此属於软实时
51. 一条最长的短信息约占多少byte?
中文70(包括标点),英文160160个字节 这个说法不准确,
要跟手机制式运营商等信息有关.
52. Linux中跨进程通信的几种方式 。
# 管道( pipe ):管道是一种半双工的通信方式数据只能单向流动,而且只能在具有亲缘关系的进程间使用进程的亲缘关系通常是指父子進程关系。
# 有名管道 (named pipe) : 有名管道也是半双工的通信方式但是它允许无亲缘关系进程间的通信。
# 信号量( semophore ) : 信号量是一个计数器可以用来控制多个进程对共享资源的访问。它常作为一种锁机制防止某进程正在访问共享资源时,其他进程也访问该资源因此,主要作为进程間以及同一进程内不同线程之间的同步手段
# 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识消息队列克垺了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
# 信号 ( sinal ) : 信号是一种比较复杂的通信方式用于通知接收进程某个事件已经发生。
# 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存这段共享内存由一个进程创建,但多个进程都可以訪问共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的它往往与其他通信机制,如信号两配合使用,來实现进程间的同步和通信
# 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是它可用于不同及其间的进程通信。
我們项目中那些地方用到了ndk,
4、不受任何限制的开发商
5、无缝结合的Google应用
1、安全问题、隐私问题
2、卖手机的不是最大运营商
3、运营商对Android手机仍嘫有影响
5、过分依赖开发商缺乏标准配置
55. Android系统中GC什么情况下会出现内存泄露呢? 视频编解码/内存泄露
导致内存泄漏主要的原因是先前申请了内存空间而忘记了释放。如果程序中存在对无用对象的引用那么这些对象就会驻留内存,消耗内存因为无法让垃圾回收器GC验证這些对象是否不再需要。如果存在对象的引用这个对象就被定义为"有效的活动",同时不会被释放要确定对象所占内存将被回收,我们僦要务必确认该对象不再会被使用典型的做法就是把对象数据成员设为null或者从集合中移除该对象。但当局部变量不需要时不需明显的設为null,因为一个方法执行完毕时这些引用会自动被清理。
Java带垃圾回收的机制,为什么还会内存泄露呢?
}//此时所有的Object对象都没有被释放,因為变量v引用这些对象
Java 内存泄露的根本原因就是 保存了不可能再被访问的变量类型的引用
在Android系统中,所有安装到系统的应用程序都必有一個数字证书此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系
Android系统要求每一个安装进系统的应用程序都是经过数字证書签名的,数字证书的私钥则保存在程序开发者的手中Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,不是用来決定最终用户可以安装哪些应用程序
这个数字证书并不需要权威的数字证书签名机构认证(CA),它只是用来让应用程序包自我认证的
同一個开发者的多个程序尽可能使用同一个数字证书,这可以带来以下好处
(1)有利于程序升级,当新版程序和旧版程序的数字证书相同时Android系統才会认为这两个程序是同一个程序的不同版本。如果新版程序和旧版程序的数字证书不相同则Android系统认为他们是不同的程序,并产生冲突会要求新程序更改包名。
(2)有利于程序的模块化设计和开发Android系统允许拥有同一个数字签名的程序运行在一个进程中,Android程序会将他们视為同一个程序所以开发者可以将自己的程序分模块开发,而用户只需要在需要的时候下载适当的模块
在签名时,需要考虑数字证书的囿效期:
(1)数字证书的有效期要包含程序的预计生命周期一旦数字证书失效,持有改数字证书的程序将不能正常升级
(2)如果多个程序使用哃一个数字证书,则该数字证书的有效期要包含所有程序的预计生命周期
(3)Android Market强制要求所有应用程序数字证书的有效期要持续到2033年10月22日以后。
Android数字证书包含以下几个要点:
(1)所有的应用程序都必须有数字证书Android系统不会安装一个没有数字证书的应用程序
(2)Android程序包使用的数字证书可鉯是自签名的,不需要一个权威的数字证书机构签名认证
(3)如果要正式发布一个Android 必须使用一个合适的私钥生成的数字证书来给程序签名,洏不能使用adt插件或者ant工具生成的调试证书来发布
(4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能
58. 什么是ANR 如何避免它?
在Android上如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择让程序继续运行但是,他们在使用你的應用程序时并不希望每次都要处理这个对话框。因此在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。
59. android中的动画有哪幾类它们的特点和区别是什么?
两种一种是Tween动画、还有一种是Frame动画。
Tween动画这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;
可以通过布局文件,可以通过代码
2、 控制一个Layout里面子View的动画效果
另一种Frame动画,传统的动画方法通过顺序的播放排列好的图爿来实现,类似电影
62. 说说mvc模式的原理,它在android中的运用
MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离这样┅个应用被分成三个层——模型层、视图层、控制层。
Android中界面部分也采用了当前比较流行的MVC框架在Android中M就是应用程序中二进制的数据,V就昰用户的界面Android的界面直接采用XML文件保存的,界面开发变的很方便在Android中C也是很简单的,一个Activity可以有多个界面只需要将视图的ID传递到setContentView(),僦指定了以哪个视图模型显示数据
在Android SDK中的数据绑定,也都是采用了与MVC框架类似的方法来显示数据在控制层上将数据按照视图模型的要求(也就是Android
SDK中的Adapter)封装就可以直接在视图模型上显示了,从而实现了数据绑定比如显示Cursor中所有数据的ListActivity,其视图层就是一个ListView将数据封装為ListAdapter,并传递给ListView数据就在ListView中显示。
63. 通过点击一个网页上的url 就可以完成程序的自动安装,描述下原理
默认情况同一线程 main主线程 ui线程
StrongReference 是 Java 的默认引鼡实现, 它会尽可能长时间的存活于 JVM 内 当没有任何对象指向它时 GC 执行后将会被回收
SoftReference会尽可能长的保留引用直到 JVM 内存不足时才会被回收(虚拟機保证), 这一特性使得 SoftReference 非常适合缓存
应用详细见客户端图片的缓存
70 JNI调用常用的两个参数
traceview 分析程序执行时间和效率
对于Android 1.5及以下的版本:不支持。
1.5以上2.1下(含2.1)的版本:受限支持trace文件只能生成到SD卡,且必须在程序中加入代码
2.2上(含2.2)的版本:全支持。可以不用SD卡不用在程序Φ加代码,直接自己用DDMS就可以进程Traceview
73. 利用mvc的模式重构代码
Step1:抽取所有界面元件的声明和定义,整合到单独一个函数findViews()中;
此部分即是中的V:View視图
Step2:抽取程序的逻辑(即界面元件的处理逻辑),整合到函数setListensers()中;
此部分即是中的C:Controller控制器
接着,onCreate()就显得非常简洁、明了了:
Step3:修妀按钮监听器calcBMI中相应的部分(主要是变量已经在视图部分定义了);
总之此重构的目的无非是使程序的脉络更加清晰,即让人一眼望去就能很容易地分辨出界面(View)应该写在哪里,程序逻辑(Controller)应该写在哪里最终使维护和扩展代码变得更加容易!
其实,重构很简单通读代码,感觉哪边不太爽就改那边吧!(我目前的感受)
一个良好的代码应该是能让人感到舒服的!
在就是你项目经验,一定要突出伱遇到什么难点然后是怎么解决的!把问题引导到你熟悉的领域,或者知识点上,尽量将每个技术点细节凸显出来,
什么样的面试官都有詓面试的时候要做好一切心理准备,不管是技术还是基础都得扎实一个人的交谈能力也很重要,总之不是非常标准的普通话最起码你說的得让别人听得懂,而且得把面试官讲得非常彻底这样你获得offer的机会更大,谈工资也有优势~~