|
【俺赵一德】android系统使用漫谈~
8 U% t1 C$ r% S: J1 s) S
" e( q5 Z0 @$ v. z: j6 C/ L9 b9 D& t% P: V D4 Y1 {
简单说说,说3个方面的问题:9 H) Q6 I7 B/ }2 B# n; E
, Y2 D- d* v+ @; Q7 X6 f. r
1) 内存使用问题
6 q: ?+ F+ y( N8 @; w: t2) Launcher的使用问题9 f4 O) R, g) Z" l+ F& N4 \
3) 软件清理的问题(包括ROM里的). t7 O# ^% p; Q4 [* X
* r% f1 a m& T* O* K! A
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
" w' ~/ r! E f1 d" f
! i, Q2 \* @8 Z我还记得上次阿贵发起的Motorola Atrix/Xoom观摩聚会上,花朵到场之后第一件事情,就是打开atrix看看双核的android是不是不卡了;结果令他沮丧,双核的仍然会卡,只是卡的频率和延迟有所改善。
+ I+ x& F2 z2 K5 J0 N) e7 I' t
( S1 T: B0 q" t' C, k1 m+ @+ G5 v谈到android一定会被问道卡、触摸体验等问题,它的技术层面的原因很复杂,涉及到touchscreen的原厂硬件设计和驱动问题、android系统的UI事件实现、以及应用程序自己的响应方式——即使系统层面都搞定了,应用程序不及时响应用户操作也是没戏。苹果的强势管理的生态圈逻辑对保证用户体验是有帮助的,在appstore发布程序需要通过苹果的软件质量审查,而android没这个,这是open的代价。
. H( z8 s5 L) w( m% F! ]! `2 O, x; @/ o9 O9 j& H
而对用户而言,机器买到手,硬件和系统都定了,至于它们如何影响使用体验的具体原因变得不再重要,用户能做的只有优化自己的使用方式,尽可能的减少不必要的性能消耗,改善用户体验。: l3 E9 F( g' h8 O: P7 g
- E8 K* \$ u$ J" F% G* G& E+ \
这里的第一个问题,就是程序的内存使用。
# Z" r! K+ x2 d8 D9 K0 B- n' T# H/ l# L* _0 z3 X
Android市场上程序很多,有趣的应用不少,我不反对用户海量安装程序,但是你需要看到这些程序是否浪费了太多的内存。+ X2 f- i8 L6 r
' j& n/ C7 A" Z2 ]# B; F6 l' K' }4 X在系统内置的应用程序(Home Desktop -> Menu -> Settings -> Applications)里面就可以看到程序的内存使用状况,有两个彼此独立的选项:Manage applications ->Running,可以看到在运行的用户程序进程的内存使用,和Running Services,这里能看到运行的后台服务(相当于Windows的服务)占用的内存。3 s/ ^6 |, _. n, i- f! m6 O
+ R% t: v* G0 d9 T9 a) Y
在Running Services的最下面有一行字,大概是这样的格式:
( V1 y* m: T' ~0 u4 t; j# ~: g) D4 e. s2 }1 a. O
Other: [x1]MB in [x2], Avail: [x3]MB + [x4]MB in [x5].2 Q$ ?7 V, M! {3 J
" Y- w# b. ~4 R
不同的设备显示可能有所不同,Avail和Other的顺序反过来。( L$ ~: x- ^1 Y, t6 z+ k& I
% M1 \4 c4 \# P* A$ ~+ t9 K' d+ Z这行字是典型的Linux机器人风格,对用户来说毫不友善。官方的解释是这样的:
* m$ I; ?1 g. o9 ?5 b' M! C, r; ]: F: y/ L, g6 ^- f* T* g/ {- @
x1: 系统关键进程的内存使用。: }" I) M, k3 C% d( N$ }' |- M0 V" X
x2: 系统关键进程的数量。
6 G; r v. x) a% L# E
- u8 O2 j. M& r/ g: _. K+ ^, g4 O系统关键进程不是上述界面上显示的用户进程或者是服务,基本上无论你操作什么都不大会影响这个内存使用。以我的老爷车HTC Magic为例,这个内存大约是70MB,于是系统标称的192MB,就剩下不足120MB是用户服务和程序可用的了。2 l/ U# s0 O s1 l6 \
' |* W4 P# A4 V V6 dx3: 空闲的、可用内存。无论你在Manager Applications -> Running强制停止用户程序(点击用户程序->Force Stop),还是在running services里面关闭服务(touch to stop,如果它允许你关闭的话),都会直接释放内存增加这个值。
( _, L! _1 ~# v6 dx4: 可能可以释放的内存。! f, ~9 r, g# X
x5: 可能可以释放内存的进程数量。
! u ]7 p' S9 s4 D1 p. z* o P
: M; A6 ?0 Q( U4 `8 p' h* Kandroid的程序可以告诉系统,杀灭自己是不是安全的;系统在没有特别的内存需求时,会把这些进程继续保存在内存中,如果用户又打开这个程序,它可以启动的快一点。
/ p6 A {$ f: a# m" F5 m c
. t6 _: y' D& M' z2 V7 C但这里说“可能”的意思是:
Y. \; n$ e. Y6 F+ {0 }2 T o6 M5 [3 W4 G) m+ K
(a) 有些不要脸的进程死了之后还会活回来的——国产软件这么做的特别多。+ r) j/ a. b# Z5 _6 x
(b) 有些进程——比如content storage,提供sd卡上内容读写服务,很可能是你新启动的程序需要的,所以即使杀掉也一定会活回来。" t7 O W- o' t5 S: r$ G
3 i+ d$ B, n, Y0 r6 @5 d% K
对用户来说,如果不想安装第三方的内存查看工具的话,可以在这个界面下看看avail后面的两个值:空余内存和可能可用内存,来了解系统当前的内存使用状况。
7 A: V* U2 V% ]8 l1 p. f9 ~: a3 q0 b8 }
解释完这个很不人性的显示方式之后,来回头看一下系统程序和服务对内存的使用情况,不要忘了有些程序可能会同时启动用户程序进程和服务进程,两者要加起来。
. L& P7 D, |- v; I1 G u5 K, g0 U/ h5 r( x, N$ N$ y
Android的程序对内存的使用是非常惊人的,比如:2 |. I- k" L& U% v$ _. d; M2 j
! h* k3 K4 Q5 H: p2 \Browser:用户程序约11.4M( W1 W$ M W* Z3 N4 d
Google拼音输入法:用户程序约5.6M,服务程序约8.8M,合计:14.4M。
7 Y3 @/ j! [ }) t! _, _; q6 zGoogle Maps:用户程序约11.3M,服务程序约5.0M,合计16.3M。
% `/ `3 f6 T5 P1 \& N1 L; C, `0 _ z, D% EGoogle Service Framework:用户程序约1.4M,服务约8.3M,合计9.7M。 W4 e: U z' T5 I3 v& \
Gmail:用户程序约4.5M。9 H) X# b$ w, M/ {4 Z1 k! H" O
Contact Storage:用户程序约4.5M(视用户联系人数量而定)。6 W1 g2 a u8 `7 F3 Y$ B. z
Calendar Storage:用户程序约1.3M。
$ ~0 w. {( ]; r. |8 yMedia Storage:用户程序约0.7M,服务约3.6M(视用户存储卡上的多媒体内容而定)。
. z0 [+ X6 s! v其他Messaging,Dialer,Dialer Storage,Launcher,Bluetooth,,Upload,Download Manager,Settings等等,七七八八加起来也有近6M。
" o' [4 B$ k) C& r0 ? w! w/ G% n) ?8 _; S8 G" {# z: E
这些基本程序加起来有超过70M的内存使用,这还是建立在阿拉已经在ROM一级抠除了一些不必要的系统程序的前提下(比如Voice Search, tts)。
9 i: e Z6 D# k+ V5 |7 U0 k% }. K5 `$ A* R, v
如果设备的硬件内存不是很多,或者安装了大量的需要常驻内存的第三方程序,那么系统很快就会内存告急,切换程序的时候变成频繁的清理和启动程序,系统就慢不堪言了。) L6 f6 E) {, @. v+ N7 ^6 F
6 e! H( M) q; r* z; @, ^' g
所以想系统迅捷的第一步,就是谨慎选择第三方程序;第三方程序安装之后,要看看它的内存使用情况,尤其是Service部分;比如一些仅仅提供天气预报的Widget,后台启动的服务就要消耗近10M的内存,至少在我的HTC Magic上这个开销和回报肯定是不成比例的,我的替代方案是找到一个天气预报的web页面(http://mw.weather.com),把它做成书签放在桌面上,这样也就够用了。Not perfect, but good enough.3 k8 n6 ?# d5 A. P7 {
* C% R8 g- B N' m6 l
事实上几乎所有的常用程序的第三方增强版本,比如Winamp,Handcent SMS,和系统内置的比,都有惊人的内存消耗;在内存不多的设备上,还是尽可能的用内置的版本。. c2 E8 W/ f( {- {+ r A* M! t# u# g
4 A' H& f) j( D0 e) Y6 G另外值得一提的是,系统内置提供的程序,除了音乐,SMS等必须常驻后台的之外,大多可以通过back键退出——退出的时候自动释放内存,和Home键切换到桌面不同,后者仅相当于Windows的最小化。多使用back键也是一个好习惯。
m- W0 H6 p$ }9 T, { M! s. z( E# U3 ^2 ~+ W# s
Android系统的内置Browser有个很好的特性,它把页面cache在内置存储或者SD卡上,而不是占用内存,它的内存使用是比较稳定的,和开多少页面没有太大关系。因此能通过web实现的功能,如果不是特别必要,可以通过web访问使用,比安装本地应用程序节省不少内存。
2 c. `. H, l! L& B! d3 J1 M: _3 \; {; |: O5 r7 l3 E- x
顺便再说一下内置Browser的一个缺点。它有个强悍的Javascript引擎——但也常常带来麻烦,有时会因为页面的js过于复杂而难以刷出页面;这种情况下么有特别好的办法,关闭页面是唯一的办法,有时候要强制关闭Browser进程,我对付这个情况的办法是安装了一个Opera mini(国内的竞争产品是UCWeb),事实上它不能对付很复杂的Javascript,但这刚好是我们需要的,Opera mini的内存使用惊人的少,只有1-2M,同样会使用flash介质cache页面。另外的一个方法是使用Dolphin HD,定义一个手势关闭JS,重新load页面。总而言之,浏览器的JS有时是影响性能的一个因素,但你还不能选择缺省关掉,Google本身的移动页面几乎都需要JS支持,最理想的解决方案应该是象Firefox的no script插件那样缺省关闭js,用白名单打开,可惜目前没这样的browser。不知道firefox的android版本是否可以实现。: [+ }! t4 t( [
1 Z# O$ ]+ \. x9 @, g/ H9 q6 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~- ]: V7 w$ Z6 H7 J: p0 ^
7 s4 ?1 a1 f: X6 r6 X; d
第二个问题来说说Launcher。" Y, C! o/ t% J: l7 E9 k- f- Y
8 z+ @' Y7 ^/ ^0 ^; C1 R我一直使用ADW Launcher,原因是CyanogenMod的原版ROM里内置了它。早期的ADW性能不太好,而且设置过多,不如Launcher Pro,但我个人感觉最新的版本已经非常出色,尤其是在内存使用方面,比Launcher Pro少很多,而Launcher Pro为了追求顺滑的体验,使用了太多的内存。
1 m& Q6 `5 v( A% p$ O; \) B
1 _$ U1 }# n( C不同的用户使用Launcher的方式有很多不同,包括widget和shortcut选择,操作方式定义等等。但是这里面有两个问题值得讨论——从内存使用和系统反应迅捷的角度讲:- S. p5 p' K9 F) C. D, Y# h
3 I5 e% y2 ^$ l! l1. widget该怎么用。$ I" L- U. G8 `) |9 A* @1 {4 \
2. 是否该在桌面上摆放启动应用程序的shortcut。9 l. k; s6 m. p$ n) l
6 [3 K( _9 Y0 N4 b
在桌面上实时更新内容是看起来很酷的,但它的代价不菲,包括内存使用、影响Launcher速度,还可能会因为后台的同步更新影响电力。而所谓的快速启动不一定能经得住推敲,你可能先要按home键,然后swipe一次到两次才能看到widget,而不是你回到缺省桌面直接能看到,right?那本质上和启动程序看到没有区别。手机不是象tablet那样的大屏幕设备,在缺省屏幕上可以放置很多widget,so,除了看起来很cool之外,widget的使用在多数情况下益处不多。
& `# [8 l# Y9 {# [# m+ @0 p- A7 g( T) K2 n) B( c
我个人使用的widget只有music player和SpringPad,为了控制的方便;CyanogenMod在Notification Bar里内置了开关设置(WiFi, 蓝牙,GPS等等),这个Widget就不必放在桌面了;Google Search看起来似乎是一个必备的widget,但是你仔细看一下就会发现那个输入框只是画上去好看的,点击之后并不是在widget里输入,而是启动Google Search程序,它做的好像是直接输入了一样;在桌面上放置一个Google Search的快捷方式得到的效果几乎是一样的,如果你不是经常使用语音输入的话。而Calendar或者Todo类的应用程序,如果不是放置在缺省桌面上的话,那么启动的速度并不比在缺省桌面放置一个快捷方式更快。, L2 l" y4 |3 H
" S1 k4 W! V% j
而在桌面上摆放启动应用程序的shortcut功能,大多数人都这样做,但它是值得商榷的。同样的,想想你的操作navigation,点击home回到缺省桌面,swipe屏幕找到程序,点击打开——Good,很快,但是很多时候你进入程序之后还要一通操作,找到联系人、找到书签、找到分类,等等。android系统最大的特色就是可以把各种数据内容的shortcut放在桌面上,联系人、播放列表、页面书签之类。他们才是真正的快捷方式,而如果你要找的内容不在桌面上,那么你去drawer里找到程序、启动、再找到内容的几率很低,而且操作并没有复杂太多。
7 F' K' p: c8 j5 o* d
. }3 L5 J3 z% e9 g9 ~SO,个人推荐的原则是:在桌面上尽可能少的启动程序快捷方式;放置内容快捷方式更高效。用桌面组织分类。# l* z' [. N- b4 j. V
! n! j4 @. E- M+ ?. r. V- B
除了Samsung等设备修改的Launcher之外,大多数Launcher遵循的原则是android裸系统的设计,最下面中间的位置点击或者拖动可以打开drawer(称为dock bar),选择程序启动;ADW和LauncherPro缺省都是这个方式,只是提供了dock bar的定制。
! A% h% ~6 X, m! H7 w- Y6 g4 X
' Y/ T f2 l9 w我在这里推荐另一个方式:关闭Dockbar。ADW支持这样使用:在UI Settings里面,把Main Dock Style选为None,在General Behavior里面把Swipe up actions设置为Open/Close App Drawer(同时推荐把Swipe down设置为Open notifications)。- W+ Y0 D4 M2 x" q3 z) E
+ K, W/ j" F, Y' d6 ]# c: k
为什么这样设置?android的桌面只支持左右的swipe操作,切换桌面;任何widget和shortcut只支持tap,不支持swipe,那么在桌面上的swipe up/down这两个最常用操作就被浪费了!(设计UI的人是谁???)) O: C! u0 M* a# g3 g1 m- b) ?
5 E& I, ]3 v* w. p) J( N这样设置还有两个额外的好处:
9 f; `+ p1 y3 o }. S/ e* q' Q* k1 J2 g9 a
1. 桌面变大了,是所有的桌面都变大了,能放置更多的内容。
5 z, d( N6 o0 E) B2. 当你横屏使用的时候,左右手都可以swipe一下打开launcher,而不是非得右手去横拉drawer——这是no-brainer设计。" ]7 P) v9 c" s+ e! |* h
% U5 y7 ?$ }+ ^3 ]; ]
最后,ADW Launcher支持分类,它的使用方式有些不直觉,在Launcher Pro里直接支持hide设置,而ADW里你只能先打开drawer,按menu,选择choose group,点击new catalog,输入名字,OK,然后再次打开菜单,点击setup group,勾选你希望在这个group里显示的程序;之后你就可以打开drawer的时候显示这个group了。这个设计是程序员思维,和不人性化,但是用来过滤哪些你不想看到的程序,Youtube之类,够用了。; C. j. {) z# f, U/ W
3 y* U$ E4 ?- J& D7 a% B" N
小结一下:
4 z9 X3 h! V, F" N+ c& L2 o7 h, s
1. 减少使用widget,华而不实。
) F* v: D+ k# V( u, G6 B2. 桌面上多放置内容的快捷方式,联系人、书签、内容分类等等。% e- L4 v9 S" Q3 t( t! O
3. 使用ADW的swipe up开启drawer, swipe down开启notificaton。; H6 { O2 v. i+ F. \+ V2 e4 f
4. 使用ADW的group功能,隐藏不常用的程序。% y) ~/ H: N# S8 B! [$ V
8 L9 D( X6 i9 Q8 C( a6 p0 O
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 Z+ o, P1 k6 ]
" d. }( P) M. \; D最后说一说危险动作;如果你想动手操作,请务必明白风险自负,本人对此免责。: S1 W9 O2 l; Y7 B, A
- ?6 v J& V) M q& @/ t即使这样折腾了,你还是会看到ROM里的一些bloatware是你不想用还占内存的。我们来说说如何把它清理出去。9 L$ ?* Q" @; f6 y. g5 E
& c& g+ H: u2 N/ ?- }
可能有第三方软件可以直接完成,譬如Root Explorer,但我刚好电脑上有android sdk,就用adb来搞定它即可。在动手之前,要准备一套能刷回去恢复系统的ROM,卡刷线刷均可。就不罗嗦了。
+ T; k2 h0 p# I" v; |" @! e2 O% v- |7 V7 J( V+ s S: s
机器需要root过。adb的service也需要以root身份启动。! J1 a0 [1 B& d' c( J( L7 C
, |, I% e1 n" M' K
adb devices可以看到设备,验证连接成功。
1 e. f, i' A, K% h( b P* e. `adb remount可以重新挂设备。
& ?# ~: L; Q5 A% k' ~& [adb root可以以root身份重新启动adb服务。2 I# _0 H! m, U9 f
adb reboot可以重启系统。
* E% e0 q$ D F. }" ^1 hadb push 本地文件 目标文件 可以把文件发送到android手机上& r2 N; h( e& _/ Y/ p
adb pull 目标文件 本地文件 可以把android手机上的文件拖到本地来9 r' I; K6 V7 V. p9 W8 g
adb shell 命令 可以在手机上执行linux命令,ls/mv/rm之类
' Q) Y2 Y& N& Q9 H# C3 L" u& P! O3 v. o2 @, E
OK,在手机上内置的程序都在/system/app目录下,很多都可以删除,包括browser, music等等都可以,如果你不需要或者想使用第三方替换掉的话;Google一些会升级的服务,比如Google Map也最好删除,你还可以在电子市场上把最新版装回来(可能需要先安装Market Enabler伪装成美国用户);Vending.apk是电子市场,貌似不怎么升级,应该留下;Launcher是可以删除的,但如果删除了Launcher机器就boot完之后停在启动的splash screen上了,但这个状态没问题,你可以在这个状态下把Launcher用adb push装进去(前提是USB debug打开了!别忘了);多装几个launcher也是可以的,但是多余的launcher即使不用也会占点儿内存。: _! f) o% p* H1 S/ [4 h; s9 w
5 L& Q! I; b3 |! F' ]+ J z
这样搞过一遍之后,那些驻留在系统中的bloatware就都死光光了,升级的Google程序从market安装最新版本,老版本也不必占用空间了,而多出来的空间你可以干一些其他事情,比如可以替换掉系统的字体或者铃声(文件名要一致,替换文件),另外第三方定制的ROM里的管理工具和splash screen也可以刮掉。* p( _+ J/ Q w7 j L: W( C
+ P4 X' G- }5 Y& }5 v彻底干净了。 K5 ]% a; P* N6 P' ~
: m- X+ b8 M/ B具体哪些程序方便删除可以google/baidu一下,网上很多讨论的,就不仔细说了。3 G0 h: v( o1 W9 Q
! |( P9 k% b* Y! d9 G
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
) }9 [& {+ p' L& d, V4 L y U1 N; w& e1 |$ V' q
总而言之,即使只有192M内存的HTC magic也是可以速度飞快、反应迅捷和省电耐用的,虽然折腾了点儿。
) ~5 Y- k. k$ W+ I$ j/ D Z9 D; a w- {, o" ]7 q
祝你的android手机同样动力澎湃、孔武有力。谢谢阅读。
( `! f9 ?3 V5 l2 Y. [1 @, j
$ U5 C( _3 ?7 t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6 P% U% P3 S# b2 r2 B, ^* Y3 h: h, k! {6 {* v, V _0 Y
补遗:; c/ i) R7 h4 `8 Q; h& w9 y+ i
5 \& \, K* G( Y1. Google的背景同步做的不错,一般不需要关闭,除非你对电力和资费特别在意;但是用不到的同步应该关闭,比如Google Picasa,国内用不了,Google Calendar,如果不用的话甚至可以直接在ROM里干掉,能省几个1~2M的内存。 y5 W6 @' T7 B: S$ V: h% S3 O
7 z# ^4 \# i$ F. Q! g) \& A4 l2. 个人不使用任务管理器和自动杀进程工具,用过,没多少感觉(在系统优化好之后);我在不太常用的桌面上放置了上述的application settings和services settings的快捷方式(桌面快捷方式shortcut ->settings),有的时候会在这里面直接杀程序,比如浏览器load不动了。没什么特别不方便的,各种查看内存和任务的工具,本身也开销不小。3 G/ W- j+ @; y8 L# ^0 @
, ?. o* t% g8 G2 G8 f/ j
3. 各种动画特效没什么必要关闭,如果你喜欢的话,android的动画特效都是系统一级用硬件加速画的,功耗和内存使用都不大。$ u ?7 b# P$ X; Y# F
7 u8 _' Y' i. B+ }' F" u4. 如果系统支持JIT编译,打开这个选项。& T) f4 [! R! M/ m; R) C- H
3 [6 K i. P# \6 W4 E/ K5. CyanogenMod缺省支持内存压缩,在Performance Settings里面,Compcache RAM Usage,在系统充分优化过去掉各种bloatware而且安装程序不多的情况下,这个可以Disable掉,能提高系统速度;surface dithering没有太大意义,Lock home in memory是有用的,防止Launcher程序进程被杀,Lock messaging app in memory也是有用的,android系统有个bug,message程序在内存极低的情况下可能被杀掉,漏掉短信;这两个都是需要的;vm heap size缺省的16M基本够了,但要运行一些大型程序(非游戏),可以适当调高。 ' L% B6 [+ H# n
, w/ f8 r5 A( E" i6 O. l( f( ~- {3 R/ @' \' j
: P8 B8 D0 d( H
+ u2 M9 X/ |4 @: h: Lhttp://www.hi-pda.com/forum/view ... &extra=page%3D1 |
|