Android最全面试题71道题 详解

[复制链接]
查看11 | 回复0 | 2013-2-25 14:51:24 | 显示全部楼层 |阅读模式
Android最全面试题71道题 详解

1. 下列哪些语句关于内存回收的说明是正确的? (b )
A、 程序员必项创建一个线程来释放内存
B、 内存回收程序负责释放无用内存
C、 内存回收程序允讲程序员直接释放内存
D、 内存回收程序可以在指定的时间释放内存对象

android内存回收机制 我想每个人第一次用Android的时候,不可避免的会去装 个任务管
理器,然后对里面时刻都停留着一大堆的程序表 示触目惊心,然后
会在桌面上建立一个快捷清空内存的按 钮,时不时啪的按一下,看
着内存剩余数量从30多变成100 多然后很有快感... 其实
吧,Android 是Linux的内核,每一个程序都是一个独立 的JAVA虚
拟机,就和油汤里的油花一样互不干扰,这样充分 保证了万一某个
程序的JAVA虚拟机崩溃,系 统依旧稳定正 常运行. 而Android和
传统Linux不一样的地方又在于,传统Linux在 进程活动停止后就
结束了,这就类似于我们用S60和 WM一 样,关闭程序,内存释放.而
Android会把这些进程保留在内 存里,干嘛呢?为了保证你再次激活
这些进程时候启动的更 快, 比如说我们挂在桌面的Widgets, 具
体一点我们拿新浪微博举例吧.我刚看完,退出,突然我想 我发一条
微博吧, 那么这个时候我可以直接在桌面 Widgets上操作----设想
一 下如果我退出的时候这个进程就终止了,那么我在桌面上 点击
Widgets的时候会不会卡顿一下甚至没有响 应? ----这就跟我们把
Widgets挂在桌面的行为完全背离了,放 在桌面上就是为了能随时
观察到程序运行的情况, 以及随时可以快速调用程序.所 以
Android并没有在进程活 动停止就释放对应的内存.那么也许你还
是会有疑问,那么 内存够不够用呢?
512的内存被我用的只剩56M是不是很恐怖?其实系统一 点也不卡
的,蛋定蛋 定 是的,我理解,因为大家这么多年Windows都用习
惯 了,Windows内存不足的时候机器卡的会让你想砸掉机箱, 而且
调用虚拟内存的时候硬盘 喀喀喀想的让你肉疼. 你肯定也会怕你
的手机明明512M内存结果就剩下30来M 把你卡到崩溃.事实上
呢,Android会在系统需要更多内存 的时候,去释放掉那些占用内存
的进程----这个活动是智能的. 最早大家认为是有个排序,比如最近
使 用过哪些程序(LRU机制,Last Recently Used),然 后结束最
早的进程.不过并非如此,否则就 变成我们上小学 时候那样,个子
高的块头大的男生跟班长下去拔草扛新书, 女生们留在班里绣花
吧... 这样很明显不公平而且没准会结束掉那些我们并不想 结
束 掉的进程----譬如说这会儿我想切回到刚才后台的网页继 续
浏览结果悲怆的发现它被系统给我强制关闭了...
Android把进程分成了一些优先级,比如 前台进程(Foreground),比
如我们正在看书,那么看书 的程序就是前台进程,这些进程是不会
被系统优先结束的. 当我把它切到后台的时候,它就变成后台进程
了. 还有可见进程(Visible), 这个怎么说呢,譬如输入法程 序,
你平时是看不见它的,但是在你打开输入界面的时候,它 会很快的
弹出来,而不是让你等啊等啊等,看不到的原因是 透明度 的机制,
咱就不要钻牛角尖讨论为啥我看不见了... 还有桌面的Widgets,比
如我们的桌面时钟,这个东西就是 可见的,如果它被系统终止了会
有什么 样的结果?这个 Widgets依然会显示在桌面上,但是时针不
走了... 主要服务,比如说,电话的拨号功能,你也不想正急着
打 电话呢结果人家给你卡 半天吧,尤其像我这样联系人上2000
的,载入一遍真的很慢啊...所以这些主要服务平时也 不会被系统
自动结束,除非你非要关它,关了也会自己重 新 加载的.这也是你
完全释放内存以后过一会就看着内存可 用值又慢慢降低的原因.
次要服务(secondary server),诸如谷歌企业 套 件,Gmail,联系
人,看着这些程序出现在任务管理器里可能 你会非常的莫名其妙,
丫的这都哪跟哪啊我没开啊...其实 它们和一些系统功能也是息
息相关的,比如Gmail的邮件推 送,我们时常需要用到它们,所以系
统也太会去终止它们.甚 至于HTC机器上著名的HTC Sense,这个
也是次要 服务,但 是其实它承接着整个系统界面的运行,所以,如
果你强行关 闭所有进程的时候,你的屏幕会变成一片白...然后慢
慢等 HTC Sense加载.
后台进程(hidden),就是我们通常意义上理解的启动后 被切换到后
台的进 程,比如如浏览器和阅读器.后台进程的 管理策略有多种,
但是一般来讲,系统都会视内存情况,尽可 能多的保留后台程序,这
样会影响到你启动别的程序的 运 行速度----我想这个很好理解,
因为内存确实不够了,而且你 还没让系统自动释放内存.但好处是,
你再次切换到这些已 启动的程序时几乎是无缝的, 速度绝对比你
从0开始启动它 要快得多.所以,这种后台进程在内存极度不够的
时候,肯定 会被系统选择性的干掉的. 内容供应节点
(content provider),没有程序实体,仅提 供内容供别的程序去用
的,比如日历供应节点,邮件供应节 点等.在系统自动终止进程时,
这类 程序享有优先的被干掉 权... 空进程(empty), 没有任何
东西在内运行的进程,有些程序在退出后,依然会 在进程中驻留一
个空进程,这个进程里 没有任何数据在运 行,作用往往是提高该程
序下次的启动速度或者记录程序 的一些历史信息.这部分进程无疑
是系统最先终止的.
说了这么多,其实还是要结合实际的程序来看一下的,比如 Android
这个很有 名的自动内存调配的软件,Auto Memory Manager,它的
设置和帮助界面就如上面所说的, 它自动提供了多种默认配置,例
如极速模式,这个 模式下,会 帮助你在设定好的临界值区间上,结
束空进程以及内容供 应节点等等低优先级保留权的进程,来给你腾
出更多的内 存,加速新运行程序打开的速 度,但是它也说明了这种
模式 的弊端,就是一些可能你不想被关闭的进程会被过早的关 闭,
比如说,闹钟----在G2 G3还很火爆的2009年,很多用 户 在买完
手机后给我抱怨,哎呀这个机器闹钟怎么老不响 啊...上班老迟
到...其实这就是因为手动结束进程的时候结 果把闹钟也给干掉了.
系统的时间 是会一直走的,这属于主 要服务,而闹钟呢,只是主要
服务的一个附属品,所以被结束 后,是不会自动被启动的,既然没有
启动自然就不会响了.与 此类似的 例子就是里程碑不充电的BUG,
这是因为Moto的 机器里有个USB的进程,如果你把它结束后,理论
上会重新 启动的但是也会不启动,后面这种情况出现 的结果就是
你 插充电器没反应,插数据线连电脑没反应...重启手机就
好 了. 当然我知道大家的洁癖很多,有的人就是见不得内存值
太 小...好吧如果 你不想一些被系统认为不太重要而你又很
需 要的进程被你自己亲手扼杀的话,那么我推荐你使用高级 任务
管理器这个程序,你可以把一些进程自动隐藏起来, 也 就是说当你
挥起狼牙棒横扫一堆进程的时候,你设置好的 几个进程是不会受任
何影响的,比如桌面Launcher,比如闹 钟,比如USB,等等等等. 但
话说回来,我是不建议大家去手动 管理Android的内存,也许你会
不习惯----我也没啥好劝告 的,总之,不要把你的智能机想的那么
笨就行 了. 刚才全杀掉进程后,过了一会,我的DEFY又变成剩余
60M内 存,还是没啥鸭梨啊...如果你感兴趣可以做个试验,内 存
很少的时候,你打开一个 大游戏,然后退出,你会发现... ……全文:http://wenku.it168.com/d_000687575.shtml
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行