|
【俺赵一德】android系统使用漫谈~
3 \: Y# Y i' e
8 Q& k0 a6 D' A+ y& O" f [: d+ g5 K, t% {+ u) B: K
简单说说,说3个方面的问题:$ I( n% c: j: I* D* V+ Y
2 @4 [' Y7 W3 e# f" m7 q
1) 内存使用问题 j, X+ V+ u" d. N; ?% O3 h) I
2) Launcher的使用问题7 q+ e; M* S( H
3) 软件清理的问题(包括ROM里的)
+ v* l( L# N7 s7 Q4 g2 R8 N
, d5 G/ S$ k/ X: h~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
G& j" V ^; w% v% X, x6 {6 H; E4 T/ ?: Q& L* }( s m
我还记得上次阿贵发起的Motorola Atrix/Xoom观摩聚会上,花朵到场之后第一件事情,就是打开atrix看看双核的android是不是不卡了;结果令他沮丧,双核的仍然会卡,只是卡的频率和延迟有所改善。
- t7 `8 A( N( A& k- J( E$ v# L+ W, Z' L. u) I* h4 x" B2 e0 _$ w
谈到android一定会被问道卡、触摸体验等问题,它的技术层面的原因很复杂,涉及到touchscreen的原厂硬件设计和驱动问题、android系统的UI事件实现、以及应用程序自己的响应方式——即使系统层面都搞定了,应用程序不及时响应用户操作也是没戏。苹果的强势管理的生态圈逻辑对保证用户体验是有帮助的,在appstore发布程序需要通过苹果的软件质量审查,而android没这个,这是open的代价。
/ B. e6 r. r; E% S- ?& k& |! L+ a; J6 i
而对用户而言,机器买到手,硬件和系统都定了,至于它们如何影响使用体验的具体原因变得不再重要,用户能做的只有优化自己的使用方式,尽可能的减少不必要的性能消耗,改善用户体验。
4 R! Q* }1 U4 X6 x: v, C
- }+ g n9 P- ^# m# B3 Z- D这里的第一个问题,就是程序的内存使用。6 N9 B6 ^0 p) d* g5 K" U0 S8 |
& ? S2 M5 o) r7 r# |* b
Android市场上程序很多,有趣的应用不少,我不反对用户海量安装程序,但是你需要看到这些程序是否浪费了太多的内存。
. O1 ~" M4 a5 I2 k
1 o% ]! c4 ^4 l+ x7 x在系统内置的应用程序(Home Desktop -> Menu -> Settings -> Applications)里面就可以看到程序的内存使用状况,有两个彼此独立的选项:Manage applications ->Running,可以看到在运行的用户程序进程的内存使用,和Running Services,这里能看到运行的后台服务(相当于Windows的服务)占用的内存。
* _6 ^2 ^- O1 d; G; l3 C
! U& Q2 s8 B5 [ H9 N, _在Running Services的最下面有一行字,大概是这样的格式:
! r( D( G- q4 _1 Q( z$ d. G4 P
Other: [x1]MB in [x2], Avail: [x3]MB + [x4]MB in [x5].; [5 m* g. t: H! G0 i1 ?
/ u/ U/ H" s4 X0 ^: x
不同的设备显示可能有所不同,Avail和Other的顺序反过来。7 I4 U4 K3 r5 D+ {' a/ D
) Y" d0 U' `* S6 V* v
这行字是典型的Linux机器人风格,对用户来说毫不友善。官方的解释是这样的:
. Y, w9 y) x, B& Q7 g) q' z7 w, U: X& Q) e0 V. S5 {% u' U
x1: 系统关键进程的内存使用。
% B! @; E: S; Wx2: 系统关键进程的数量。
, e" Q: G E) _0 D- r% F1 [% n9 j
系统关键进程不是上述界面上显示的用户进程或者是服务,基本上无论你操作什么都不大会影响这个内存使用。以我的老爷车HTC Magic为例,这个内存大约是70MB,于是系统标称的192MB,就剩下不足120MB是用户服务和程序可用的了。
: t% T/ j& Y; m& w( P [1 u% e8 O c0 Y) e' d( M4 z; G, i i2 p
x3: 空闲的、可用内存。无论你在Manager Applications -> Running强制停止用户程序(点击用户程序->Force Stop),还是在running services里面关闭服务(touch to stop,如果它允许你关闭的话),都会直接释放内存增加这个值。
- g, |) a+ @! g3 G; kx4: 可能可以释放的内存。: W, D% [3 P/ @; {5 N! t
x5: 可能可以释放内存的进程数量。
/ y# d1 f/ R0 r5 h1 d
# I: V. v& B% G0 Bandroid的程序可以告诉系统,杀灭自己是不是安全的;系统在没有特别的内存需求时,会把这些进程继续保存在内存中,如果用户又打开这个程序,它可以启动的快一点。
1 {* H6 N/ \# _$ {# i' v: p
" P7 P _6 u; c, g1 v但这里说“可能”的意思是:$ x+ v6 n3 }$ B! r4 w0 @8 s: a
0 U6 x" T1 b- H- ]' O
(a) 有些不要脸的进程死了之后还会活回来的——国产软件这么做的特别多。
& R; X4 G6 s8 |(b) 有些进程——比如content storage,提供sd卡上内容读写服务,很可能是你新启动的程序需要的,所以即使杀掉也一定会活回来。
$ D2 d0 C5 \6 L2 [9 U) ~: c( i
对用户来说,如果不想安装第三方的内存查看工具的话,可以在这个界面下看看avail后面的两个值:空余内存和可能可用内存,来了解系统当前的内存使用状况。2 }+ [3 W' H! F9 Z5 k! y7 S1 ?; g
1 G% \( i5 Z. I7 V; v
解释完这个很不人性的显示方式之后,来回头看一下系统程序和服务对内存的使用情况,不要忘了有些程序可能会同时启动用户程序进程和服务进程,两者要加起来。5 t* a0 s% Z0 q, c5 \
5 E, I2 V4 q% u9 a" I( }
Android的程序对内存的使用是非常惊人的,比如:
A0 K; {8 v$ U
/ x% V# M1 x3 A4 t; Z( z6 I/ J* N1 zBrowser:用户程序约11.4M# f4 [; s% \5 o
Google拼音输入法:用户程序约5.6M,服务程序约8.8M,合计:14.4M。( M1 ` u6 r, w0 t, T1 {
Google Maps:用户程序约11.3M,服务程序约5.0M,合计16.3M。
% [4 R' N6 U6 d! [. UGoogle Service Framework:用户程序约1.4M,服务约8.3M,合计9.7M。" k Y6 Z+ v* M* H
Gmail:用户程序约4.5M。+ y1 M; o- H3 ]5 z+ l/ \( k7 h
Contact Storage:用户程序约4.5M(视用户联系人数量而定)。
* |- _+ F6 E% p( A% aCalendar Storage:用户程序约1.3M。
4 {" s* d9 v: C% W4 j$ QMedia Storage:用户程序约0.7M,服务约3.6M(视用户存储卡上的多媒体内容而定)。3 Y) ~/ w$ V" m
其他Messaging,Dialer,Dialer Storage,Launcher,Bluetooth,,Upload,Download Manager,Settings等等,七七八八加起来也有近6M。
, w$ }; m4 I6 Q0 k( a
8 s5 s9 G ^( Q, B这些基本程序加起来有超过70M的内存使用,这还是建立在阿拉已经在ROM一级抠除了一些不必要的系统程序的前提下(比如Voice Search, tts)。& }/ I2 W2 k7 G3 A* g
: b; Y. g' u. D3 ^' _/ t如果设备的硬件内存不是很多,或者安装了大量的需要常驻内存的第三方程序,那么系统很快就会内存告急,切换程序的时候变成频繁的清理和启动程序,系统就慢不堪言了。
. k# V% ]/ ^* [' g% D" E0 d. F# \; S6 A: o% f! n7 A! b0 v! I
所以想系统迅捷的第一步,就是谨慎选择第三方程序;第三方程序安装之后,要看看它的内存使用情况,尤其是Service部分;比如一些仅仅提供天气预报的Widget,后台启动的服务就要消耗近10M的内存,至少在我的HTC Magic上这个开销和回报肯定是不成比例的,我的替代方案是找到一个天气预报的web页面(http://mw.weather.com),把它做成书签放在桌面上,这样也就够用了。Not perfect, but good enough.
1 y: `5 x& D( L$ i6 s# k6 B7 T. f |/ f& y) v% B, c( s0 C N% }
事实上几乎所有的常用程序的第三方增强版本,比如Winamp,Handcent SMS,和系统内置的比,都有惊人的内存消耗;在内存不多的设备上,还是尽可能的用内置的版本。6 J' q; u0 ]- V! U, S( v3 m$ L
. s& ^. N5 d7 z$ w X( l另外值得一提的是,系统内置提供的程序,除了音乐,SMS等必须常驻后台的之外,大多可以通过back键退出——退出的时候自动释放内存,和Home键切换到桌面不同,后者仅相当于Windows的最小化。多使用back键也是一个好习惯。
/ Z; Z% G/ F# P0 s# i4 a8 A* A) {8 V2 [+ {% q* y! i
Android系统的内置Browser有个很好的特性,它把页面cache在内置存储或者SD卡上,而不是占用内存,它的内存使用是比较稳定的,和开多少页面没有太大关系。因此能通过web实现的功能,如果不是特别必要,可以通过web访问使用,比安装本地应用程序节省不少内存。
, e; { ~% X9 {9 H( G9 [8 W Y [& i4 s. N! G6 h- r5 J" J- |, m2 N
顺便再说一下内置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版本是否可以实现。
( q. k0 G, s% ]1 f2 v5 X2 M4 }
7 t" ^% u3 _, A~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~& R4 M# P: Y0 Y5 W7 r$ p: p9 A: A
( r$ F, B& }4 j( x6 m# @! _0 c& L, o第二个问题来说说Launcher。9 v+ Y9 {8 H' w2 F9 f: W, j
% W$ P/ W' Y9 x) y& P" I% A6 M \
我一直使用ADW Launcher,原因是CyanogenMod的原版ROM里内置了它。早期的ADW性能不太好,而且设置过多,不如Launcher Pro,但我个人感觉最新的版本已经非常出色,尤其是在内存使用方面,比Launcher Pro少很多,而Launcher Pro为了追求顺滑的体验,使用了太多的内存。; X d2 \ r# N7 n4 }% Y9 e V5 W
5 s) n7 V6 o$ w% C% I$ B
不同的用户使用Launcher的方式有很多不同,包括widget和shortcut选择,操作方式定义等等。但是这里面有两个问题值得讨论——从内存使用和系统反应迅捷的角度讲: B% d+ R+ L) X! `; s/ E
# ]4 S9 X, b8 L! I/ K1. widget该怎么用。
- p- X$ S2 M! e& B9 g3 t' l2. 是否该在桌面上摆放启动应用程序的shortcut。+ @1 A, y) ]2 b& j- \9 ?$ F8 q. |
2 K s; }* g6 X+ \# z在桌面上实时更新内容是看起来很酷的,但它的代价不菲,包括内存使用、影响Launcher速度,还可能会因为后台的同步更新影响电力。而所谓的快速启动不一定能经得住推敲,你可能先要按home键,然后swipe一次到两次才能看到widget,而不是你回到缺省桌面直接能看到,right?那本质上和启动程序看到没有区别。手机不是象tablet那样的大屏幕设备,在缺省屏幕上可以放置很多widget,so,除了看起来很cool之外,widget的使用在多数情况下益处不多。
$ J8 ]+ C) n* d5 \ B0 k8 I& y. W# y! e& O4 B
我个人使用的widget只有music player和SpringPad,为了控制的方便;CyanogenMod在Notification Bar里内置了开关设置(WiFi, 蓝牙,GPS等等),这个Widget就不必放在桌面了;Google Search看起来似乎是一个必备的widget,但是你仔细看一下就会发现那个输入框只是画上去好看的,点击之后并不是在widget里输入,而是启动Google Search程序,它做的好像是直接输入了一样;在桌面上放置一个Google Search的快捷方式得到的效果几乎是一样的,如果你不是经常使用语音输入的话。而Calendar或者Todo类的应用程序,如果不是放置在缺省桌面上的话,那么启动的速度并不比在缺省桌面放置一个快捷方式更快。
$ o; r4 H1 H3 S$ ]; _; z: t8 R& @+ r) [- S' l
而在桌面上摆放启动应用程序的shortcut功能,大多数人都这样做,但它是值得商榷的。同样的,想想你的操作navigation,点击home回到缺省桌面,swipe屏幕找到程序,点击打开——Good,很快,但是很多时候你进入程序之后还要一通操作,找到联系人、找到书签、找到分类,等等。android系统最大的特色就是可以把各种数据内容的shortcut放在桌面上,联系人、播放列表、页面书签之类。他们才是真正的快捷方式,而如果你要找的内容不在桌面上,那么你去drawer里找到程序、启动、再找到内容的几率很低,而且操作并没有复杂太多。
( f; e3 N1 [" ]$ b9 M
) x! s+ i- I( t i& Y) ^" R2 V1 l* tSO,个人推荐的原则是:在桌面上尽可能少的启动程序快捷方式;放置内容快捷方式更高效。用桌面组织分类。
) J+ g6 \* i; t* k; o. m; ^
# `. a) w! S/ w" Q7 ?$ b除了Samsung等设备修改的Launcher之外,大多数Launcher遵循的原则是android裸系统的设计,最下面中间的位置点击或者拖动可以打开drawer(称为dock bar),选择程序启动;ADW和LauncherPro缺省都是这个方式,只是提供了dock bar的定制。9 [" L9 N0 P5 ^8 w
2 T" D, v" | v' N: A( E0 h
我在这里推荐另一个方式:关闭Dockbar。ADW支持这样使用:在UI Settings里面,把Main Dock Style选为None,在General Behavior里面把Swipe up actions设置为Open/Close App Drawer(同时推荐把Swipe down设置为Open notifications)。
0 v6 B F2 Q1 w$ R2 v0 k4 z5 Z% {
, ~/ |8 [8 z/ v* z+ X& c* x为什么这样设置?android的桌面只支持左右的swipe操作,切换桌面;任何widget和shortcut只支持tap,不支持swipe,那么在桌面上的swipe up/down这两个最常用操作就被浪费了!(设计UI的人是谁???)
/ V, u1 R, N2 N; t% h+ R% K! e9 i9 S
9 F0 E3 A; q) l. X这样设置还有两个额外的好处:
' ^. N" E; b: T) d( O% ], E3 W; n, }6 f
1. 桌面变大了,是所有的桌面都变大了,能放置更多的内容。+ U) H0 z# t1 I7 Z) V5 p
2. 当你横屏使用的时候,左右手都可以swipe一下打开launcher,而不是非得右手去横拉drawer——这是no-brainer设计。3 R! a8 h$ q0 [3 W8 j0 Z5 y7 c
I. L5 }! o4 D( A最后,ADW Launcher支持分类,它的使用方式有些不直觉,在Launcher Pro里直接支持hide设置,而ADW里你只能先打开drawer,按menu,选择choose group,点击new catalog,输入名字,OK,然后再次打开菜单,点击setup group,勾选你希望在这个group里显示的程序;之后你就可以打开drawer的时候显示这个group了。这个设计是程序员思维,和不人性化,但是用来过滤哪些你不想看到的程序,Youtube之类,够用了。& v( V" W1 M! I+ F3 O8 }
" z- A* W7 w1 h8 t* {小结一下:* M* p5 c9 ^( W' N/ L
% x& t! L# m' B, ~( k
1. 减少使用widget,华而不实。
2 H @1 v, M/ b6 M4 \: U, u2. 桌面上多放置内容的快捷方式,联系人、书签、内容分类等等。
/ v( ~8 Z, d2 u6 d3. 使用ADW的swipe up开启drawer, swipe down开启notificaton。
: z) R, Q; `8 m' \4. 使用ADW的group功能,隐藏不常用的程序。) A; ~" g5 y* Y: ~
9 C0 W2 ?! v! N1 R. o
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~5 t/ p: d) H: S. C7 p. @' t# ~
9 S4 ]7 K" r& x7 k1 _最后说一说危险动作;如果你想动手操作,请务必明白风险自负,本人对此免责。3 o( g; U2 b* s8 H8 P' A3 V; C
7 X% w$ q/ R+ t% I
即使这样折腾了,你还是会看到ROM里的一些bloatware是你不想用还占内存的。我们来说说如何把它清理出去。
7 E& r$ K G3 A* V, V( I9 r/ d0 m) i* L; s& p6 q. w% E3 f
可能有第三方软件可以直接完成,譬如Root Explorer,但我刚好电脑上有android sdk,就用adb来搞定它即可。在动手之前,要准备一套能刷回去恢复系统的ROM,卡刷线刷均可。就不罗嗦了。
! @# ^" Z" H8 t8 H. K3 |$ p3 r9 |" ?# }1 u: X7 c" [
机器需要root过。adb的service也需要以root身份启动。 A2 B7 W$ [6 M; @" i* [' h
7 C- ~8 Y: c+ @
adb devices可以看到设备,验证连接成功。! T/ d3 ?# T1 J; R6 b) o3 b1 x
adb remount可以重新挂设备。
" s7 z* L7 X* s* L3 h5 Kadb root可以以root身份重新启动adb服务。
! G# h' Z7 Q* S; a$ T; }adb reboot可以重启系统。( |% }5 Y# ?- F4 |
adb push 本地文件 目标文件 可以把文件发送到android手机上
9 m, \' h# H9 b e8 W1 K2 Xadb pull 目标文件 本地文件 可以把android手机上的文件拖到本地来0 g- _* e3 F8 E5 r4 \1 R
adb shell 命令 可以在手机上执行linux命令,ls/mv/rm之类
$ ]" b6 i7 Y, T, E' T4 m8 `. v* n! H. G( A$ T
OK,在手机上内置的程序都在/system/app目录下,很多都可以删除,包括browser, music等等都可以,如果你不需要或者想使用第三方替换掉的话;Google一些会升级的服务,比如Google Map也最好删除,你还可以在电子市场上把最新版装回来(可能需要先安装Market Enabler伪装成美国用户);Vending.apk是电子市场,貌似不怎么升级,应该留下;Launcher是可以删除的,但如果删除了Launcher机器就boot完之后停在启动的splash screen上了,但这个状态没问题,你可以在这个状态下把Launcher用adb push装进去(前提是USB debug打开了!别忘了);多装几个launcher也是可以的,但是多余的launcher即使不用也会占点儿内存。/ s, i7 U' O% i, a. v/ }
* L4 G: U: G. ?- T! E$ u4 w4 f
这样搞过一遍之后,那些驻留在系统中的bloatware就都死光光了,升级的Google程序从market安装最新版本,老版本也不必占用空间了,而多出来的空间你可以干一些其他事情,比如可以替换掉系统的字体或者铃声(文件名要一致,替换文件),另外第三方定制的ROM里的管理工具和splash screen也可以刮掉。
* X% V; a9 _4 K$ T7 o( s# j* x/ Q/ v6 z+ h7 V4 T
彻底干净了。7 x+ K G& p |4 R$ R3 S
- o: {" v" H6 Y+ p具体哪些程序方便删除可以google/baidu一下,网上很多讨论的,就不仔细说了。+ w( s2 n% [ B" g3 K% b/ G0 Y
1 b# b$ ?% \2 p
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~7 S9 k4 t- R( E5 d2 e. q" @
7 ?' v' K' q. v, }) p! i4 @: S) O$ F
总而言之,即使只有192M内存的HTC magic也是可以速度飞快、反应迅捷和省电耐用的,虽然折腾了点儿。4 @8 \) J/ T- U- D* Z* O: Q
4 r- R8 I) s5 m* r/ g
祝你的android手机同样动力澎湃、孔武有力。谢谢阅读。
6 n$ e6 E) X" P( {
# ?" V6 r+ ` f% J~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* H4 J2 e$ F5 ^6 P" _$ O1 g3 U- h/ B, g& F
补遗:0 a% m% Q8 R' |) l; }. Y
3 d5 Q. m' w& t/ C( V% e1. Google的背景同步做的不错,一般不需要关闭,除非你对电力和资费特别在意;但是用不到的同步应该关闭,比如Google Picasa,国内用不了,Google Calendar,如果不用的话甚至可以直接在ROM里干掉,能省几个1~2M的内存。
7 r( M# k& O" B: y
3 l/ z: K, o, {6 T% T2 H7 E3 e2. 个人不使用任务管理器和自动杀进程工具,用过,没多少感觉(在系统优化好之后);我在不太常用的桌面上放置了上述的application settings和services settings的快捷方式(桌面快捷方式shortcut ->settings),有的时候会在这里面直接杀程序,比如浏览器load不动了。没什么特别不方便的,各种查看内存和任务的工具,本身也开销不小。+ }2 X6 ~/ ^! p6 D; l
7 H- F7 s% Z. L" J+ H R' X" [0 |
3. 各种动画特效没什么必要关闭,如果你喜欢的话,android的动画特效都是系统一级用硬件加速画的,功耗和内存使用都不大。
" b. \* T1 z0 @- _) B( H! h8 h5 b/ P2 R( G* X' S! y( }/ t& @! ^
4. 如果系统支持JIT编译,打开这个选项。
; f/ _8 c, b5 z7 c3 i0 o2 u, u" j; K+ U
2 u, K1 y" O. s& x! R; R5 ? j5. 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基本够了,但要运行一些大型程序(非游戏),可以适当调高。 2 @5 U4 u! O+ o7 c8 {
2 }9 n/ m# k2 n( O6 b
2 b" D8 x, w& W" T, o' O: a5 ` q- A' x' P. e0 P
1 z0 x0 e7 b; |4 R. s! q R0 p6 T$ w
http://www.hi-pda.com/forum/view ... &extra=page%3D1 |
|