Android浼樺寲,
Android浼樺寲,
I. 缃戠粶鐩稿叧
鏇村缃戠粶浼樺寲锛屽彲鍙傝€?聽Android缃戠粶
- http澶翠俊鎭甫Cache-Control鍩?纭畾缂撳瓨杩囨湡鏃堕棿 闃叉閲嶅璇锋眰
- 鐩存帴鐢↖P鐩磋繛锛屼笉鐢ㄥ煙鍚嶏紝绛栫暐鎬ц窡鏂版湰鍦癐P鍒楄〃銆?鈥?DNS瑙f瀽杩囩▼鑰楁椂鍦ㄧ櫨姣宸﹀彸锛屽苟涓旇繕鏈夊彲鑳藉瓨鍦―NS鍔寔銆?/li>
- 鍥剧墖銆丣S銆丆SS绛夐潤鎬佽祫婧愶紝閲囩敤CDN锛堝綋鐒跺鏋滄槸浣跨敤7鐗涗箣绫荤殑鏈嶅姟灏卞凡缁忕粰浣犳惌寤哄竷缃ソ浜嗭級
- 鍏ㄥ眬鍥剧墖澶勭悊閲囩敤婕忔枟妯″瀷鍏ㄥ眬绠℃帶锛屾墍璇锋眰鐨勫浘鐗囧ぇ灏忔渶濂戒緷鐓т笟鍔″ぇ灏忔彁渚?鏈€澶т笉瓒呰繃灞忓箷鍒嗚鲸鐜囬渶瑕侊紝濡傛灉璇锋眰鍘熷浘锛屼篃涓嶈瓒呰繃
GL10.GL_MAX_TEXTURE_SIZE
- 鍏ㄥ眬缂╃暐鍥剧洿鎺ラ噰鐢╳ebp锛屽湪灏藉彲鑳戒笉鎹熷け鍥剧墖璐ㄩ噺鐨勫墠鎻愪笅锛屽浘鐗囧ぇ灏忎笌png姣旂缉灏?0% ~ 70%
- 濡傛灉鍒楄〃閲岀殑缂╃暐鍥炬湇鍔″櫒澶勭悊濂界殑灏忓浘锛屽彲浠ヨ€冭檻鐩存帴鍦ㄥ垪琛ㄦ暟鎹姹備腑锛岀洿鎺ヤ互base64鍦ㄥ垪琛ㄦ暟鎹腑鐩存帴甯︿笂鍥剧墖锛堝浗鍐呰繕姣旇緝灏戯紝娴峰鏈変簺杩欑鍋氭硶锛屽ソ鍍弚eb绔瘮杈冨父瑙侊級
- 杞鎴栬€卻ocket蹇冭烦閲囩敤绯荤粺
AlarmManager
鎻愪緵鐨勯椆閽熸湇鍔℃潵鍋氾紝淇濊瘉鍦ㄧ郴缁熶紤鐪犵殑鏃跺€檆pu鍙互寰楀埌浼戠湢锛屽湪闇€瑕佸敜閱掓椂鍙互鍞ら啋锛堟寔鏈塩pu鍞ら啋閿侊級 - 鍙互閫氳繃灏嗛浂鏁g殑缃戣矾鐨勮姹傛墦鍖呰繘琛屼竴娆℃搷浣滐紝閬垮厤杩囧鐨勬棤绾夸俊鍙峰紩璧风數閲忔秷鑰椼€?/li>
1. 浼犺緭鏁版嵁鏍煎紡閫夋嫨
- 濡傛灉鏄渶瑕佸叏閲忔暟鎹殑锛岃€冭檻浣跨敤Protobuffers聽(搴忓垪鍖栧弽搴忓垪鍖栨€ц兘楂樹簬json)锛屽苟涓旇€冭檻浣跨敤nano protocol buffer銆?/li>
- 濡傛灉浼犺緭鍥炴潵鐨勬暟鎹笉闇€瑕佸叏閲忚鍙栵紝鑰冭檻浣跨敤Flatbuffers聽(搴忓垪鍖栧弽搴忓垪鍖栧嚑涔庝笉鑰楁椂锛岃€楁椂鏄湪璇诲彇瀵硅薄鏃?灏辫繖涓€閮ㄥ垎濡傛灉闇€瑕佷紭鍖栵紝鍙互鍙傜湅Flatbuffer Use Optimize
II. 鍩虹鐩稿叧
1. 鏁版嵁缁撴瀯
濡傛灉宸茬煡澶ф闇€瑕佸澶э紝灏辩洿鎺ョ粰鍒濆澶у皬锛屽噺灏戞墿瀹规椂棰濆寮€閿€銆?/p>
ArrayList
: 閲岄潰灏变竴鏁扮粍锛屽唴瀛樺皬锛屾湁搴忓彇鍊煎揩锛屾墿瀹规晥鐜囦綆
LinkedList
: 閲岄潰灏变竴鍙屽悜閾捐〃锛屽唴瀛樺ぇ锛岄殢鏈烘彃鍏ュ垹闄ゅ揩锛屾墿瀹规晥鐜囬珮銆?/li>
HashSet
: 閲岄潰灏变竴涓?code>HashMap锛岀敤key瀵瑰瀛樺偍锛岀洰鐨勫氨鏄笉鍏佽閲嶅鍏冪礌銆?/li>
ConcurrentHashMap
: 绾跨▼瀹夊叏锛岄噰鐢ㄧ粏鍒嗛攣锛岄攣棰楃矑鏇村皬锛屽苟鍙戞€ц兘鏇翠紭
Collections.synchronizedMap
: 绾跨▼瀹夊叏锛岄噰鐢ㄥ綋鍓嶅璞′綔涓洪攣锛岄绮掕緝澶э紝骞跺彂鎬ц兘杈冨樊銆?/li>
SparseArray
銆?code>SparseBooleanArray銆?code>SparseIntArray: 閽堝Key涓?code>Int銆?code>Boolean杩涜浜嗕紭鍖栵紝閲囩敤浜屽垎娉曟煡鎵撅紝绠€鍗曟暟缁勫瓨鍌ㄣ€傜浉姣?code>HashMap鑰岃█锛?code>HashMap姣忔坊鍔犱竴涓暟鎹紝澶х害浼氶渶瑕佺敵璇烽澶栫殑32瀛楄妭鐨勬暟鎹紝鍥犳Sparsexxx
鍦ㄥ唴瀛樻柟闈㈢殑寮€閿€浼氬皬寰堝銆?/li>
2. 缂栫爜涔犳儻
- 灏介噺绠€鍖栵紝涓嶈鍋氫笉闇€瑕佺殑鎿嶄綔銆?/li>
- 灏介噺閬垮厤鍒嗛厤鍐呭瓨(鍒涘缓瀵硅薄): 1) 濡傛灉涓€涓柟娉曡繑鍥炰竴涓?code>String锛屽苟涓旇繖涓柟娉曠殑杩斿洖鍊煎缁堥兘鏄鐢ㄦ潵
append
鍒颁竴涓?code>StringBuffer涓婏紝灏辨敼涓轰紶鍏?code>StringBuffer鐩存帴append
涓婂幓锛岄伩鍏嶅垱寤轰竴涓煭鐢熷懡鍛ㄦ湡鐨勪复鏃跺璞★紱2) 濡傛灉浣跨敤鐨勫瓧绗︿覆鏄埅鍙栬嚜鏌愪竴涓瓧绗︿覆锛屽氨鐩存帴浠庨偅涓瓧绗︿覆涓婇潰substring
锛屼笉瑕佹嫹璐濅竴浠斤紝鍥犱负閫氳繃substring
铏界劧鍒涘缓浜嗘柊鐨?code>String瀵硅薄锛屼絾鏄叡浜簡閲岄潰鐨?code>char鏁扮粍涓殑char
瀵硅薄锛屽噺灏戜簡杩欏潡瀵硅薄鐨勫垱寤猴紱閲忎娇鐢ㄥ涓竴缁存暟缁勶紝鍏舵€ц兘楂樹簬澶氱淮鏁扮粍锛?code>int鏁扮粍鎬ц兘杩滃ぇ浜?code>Integer鏁扮粍鎬ц兘锛?/li>
- 濡傛灉浣犵‘瀹氫笉闇€瑕佽闂被鎴愬憳锛岃鏂规硶
static
锛岃繖鏍疯皟鐢ㄦ椂鍙互鎻愬崌15%~20%鐨勯€熷害锛屽洜涓轰笉闇€瑕佸垏鎹㈠璞$姸鎬併€?/li>
- 濡傛灉鏌愪釜鍙傛暟鏄父閲忥紝鍒繕浜嗕娇鐢?code>static final锛岃繖鏍峰彲浠ヨ
Class
棣栨鍒濆鍖栨椂锛屼笉闇€瑕佽皟鐢?code><clinit>鏉ュ垱寤?code>static鏂规硶锛岃€屾槸鍦ㄧ紪璇戞椂灏辩洿鎺ュ皢甯搁噺鏇挎崲浠g爜涓娇鐢ㄧ殑浣嶇疆銆?/li>
- Android寮€鍙戜腑锛岀被鍐呭敖閲忛伩鍏嶉€氳繃
get/set
璁块棶鎴愬憳鍙橀噺锛岃櫧鐒惰繖鍦ㄨ瑷€鐨勫紑鍙戜腑鏄竴涓ソ鐨勪範鎯紝浣嗘槸Android铏氭嫙鏈轰腑锛屽鏂规硶鐨勮皟鐢ㄥ紑閿€杩滃ぇ浜庡鍙橀噺鐨勭洿鎺ヨ闂€傚湪娌℃湁JIT鐨勬儏鍐典笅锛岀洿鎺ョ殑鍙橀噺璁块棶姣旇皟鐢ㄦ柟娉曞揩3鍊嶏紝鍦↗IT涓嬶紝鐩存帴鐨勫彉閲忚闂洿鏄瘮璋冪敤鏂规硶蹇?鍊?
- 褰撳唴閮ㄧ被闇€瑕佽闂閮ㄧ被鐨勭鏈?code>鏂规硶/鍙橀噺鏃讹紝鑰冭檻灏嗚繖浜涘閮ㄧ被鐨勭鏈?code>鏂规硶/鍙橀噺鏀圭敤鍖呭彲瑙佺殑鏂瑰紡銆傞鍏堝湪缂栧啓浠g爜鐨勬椂鍊欙紝閫氳繃鍐呴儴绫昏闂閮ㄧ被鐨勭鏈?code>鏂规硶/鍙橀噺鏄悎娉曠殑锛屼絾鏄湪缂栬瘧鐨勬椂鍊欎负浜嗘弧瓒宠繖涓細灏嗛渶瑕佽鍐呴儴绫昏闂殑绉佹湁
鏂规硶/鍙橀噺
灏佽涓€灞傚寘鍙鐨勬柟娉曪紝瀹炵幇璁╁唴閮ㄧ被璁块棶杩欎簺绉佹湁鐨?code>鏂规硶/鍙橀噺锛屾牴鎹墠闈㈡垜浠湁鎻愬埌璇存柟娉曠殑璋冪敤寮€閿€澶т簬鍙橀噺鐨勮皟鐢紝鍥犳杩欐牱浣垮緱鎬ц兘鍙樺樊锛屾墍浠ユ垜浠湪缂栫爜鐨勬椂鍊欏彲浠ヨ€冭檻鐩存帴灏嗛渶瑕佽鍐呴儴绫昏皟鐢ㄧ殑澶栭儴绫荤鏈?code>鏂规硶/鍙橀噺锛屾敼涓哄寘鍙銆?/li>
- 灏介噺灏戜娇鐢?code>float銆傚湪寰堝鐜颁唬璁惧涓紝
double
鐨勬€ц兘涓?code>float鐨勬€ц兘鍑犱箮娌℃湁宸埆锛屼絾鏄粠澶у皬涓婇潰double
鏄?code>float鐨勪袱鍊嶇殑澶у皬銆?/li>
- 灏介噺鑰冭檻浣跨敤鏁村瀷鑰岄潪娴偣鏁帮紝鍦ㄨ緝濂界殑Android璁惧涓紝娴偣鏁版瘮鏁村瀷鎱竴鍊嶃€?/li>
- 灏介噺涓嶈浣跨敤闄ゆ硶鎿嶄綔锛屾湁寰堝澶勭悊鍣ㄦ湁涔樻硶鍣紝浣嗘槸娌℃湁闄ゆ硶鍣紝涔熷氨鏄鍦ㄨ繖浜涜澶囦腑闇€瑕佸皢闄ゆ硶鍒嗚В涓哄叾浠栫殑璁$畻鏂瑰紡閫熷害浼氭瘮杈冩參銆?/li>
- 灏介噺浣跨敤绯荤粺sdk涓彁渚涚殑鏂规硶锛岃€岄潪鑷繁鍘诲疄鐜般€傚
String.indexOf()
鐩稿叧鐨凙PI锛孌alvik灏嗕細鏇挎崲涓哄唴閮ㄦ柟娉曪紱System.arraycopy()
鏂规硶鍦∟exus One鎵嬫満涓婏紝浼氭瘮鎴戜滑涓婂眰鍐欑殑绫讳技鏂规硶鐨勬墽琛岄€熷害蹇?鍊嶃€?/li>
- 璋ㄦ厧缂栧啓native锛屾€ц兘涓嶄竴瀹氭洿濂斤紝Native骞朵笉鏄敤浜庝娇寰楁€ц兘鏇村ソ锛岃€屾槸鐢ㄤ簬鏈変簺宸茬粡瀛樺湪鐨勫簱鏄娇鐢╪ative璇█瀹炵幇鐨勶紝鎴戜滑闇€瑕佸紩鍏ndroid锛岃繖鏃舵墠浣跨敤銆?) 闇€瑕佸鍑哄紑閿€鍦ㄧ淮鎸丣ava-native鐨勯€氫俊锛?) 鍦╪ative涓垱寤虹殑璧勬簮鐢变簬鍦╪ative heap涓婇潰锛屽洜姝ら渶瑕佷富鍔ㄧ殑閲婃斁锛?) 闇€瑕佸涓嶅悓鐨勫鐞嗗櫒鏋舵瀯杩涜鏀寔锛屽瓨鍦ㄦ槑鏄剧殑鍏煎鎬ч棶棰橀渶瑕佽В鍐炽€?/li>
- 鍦ㄦ病鏈塉IT鐨勮澶囦腑锛岄潰鍚戞帴鍙g紪绋嬬殑妯″紡(濡?code>Map map)锛岀浉姣旂洿鎺ヨ闂璞$被(濡?code>HashMap map)锛屼細鎱?%锛屼絾鏄湪瀛樺湪JIT鐨勮澶囦腑锛屼袱鑰呯殑閫熷害宸笉澶氥€備絾鏄唴瀛樺崰鐢ㄦ柟闈㈤潰鍚戞帴鍙e彉鎴愪細娑堣€楁洿澶氬唴瀛橈紝鍥犳濡傛灉浣犵殑闈㈠悜鎺ュ彛缂栫▼涓嶆槸鍗佸垎鐨勫繀瑕佺殑鎯呭喌涓嬪彲浠ヨ€冭檻涓嶇敤銆?/li>
- 鍦ㄦ病鏈塉IT鐨勮澶囦腑锛岃闂湰鍦板寲鍙橀噺鐩稿涓庢垚鍛樺彉閲忎細蹇?0%锛屼絾鏄湪瀛樺湪JIT鐨勮澶囦腑锛屼袱鑰呴€熷害宸笉澶氥€?/li>
閬嶅巻浼樺寲
灏介噺浣跨敤Iterable
鑰屼笉鏄€氳繃闀垮害鍒ゆ柇鏉ヨ繘琛岄亶鍘嗐€?/p>
// 杩欑鎬ц兘鏄渶宸殑锛孞IT涔熸棤娉曞鍏朵紭鍖栥€?
public void zero() {
int sum = 0;
for (int i = 0; i < mArray.length; ++i) {
sum += mArray[i].mSplat;
}
}
// 鐩稿zero()鏉ヨ锛岃繖绉嶅啓娉曚細鏇村揩浜涳紝鍦ㄥ瓨鍦↗IT鐨勬儏鍐典笅閫熷害鍑犱箮鍜宼wo()閫熷害涓€鏍峰揩銆?
public void one() {
int sum = 0;
// 1) 閫氳繃鏈湴鍖栧彉閲忥紝鍑忓皯鏌ヨ锛屽湪涓嶅瓨鍦↗IT鐨勬墜鏈轰笅锛屼紭鍖栬緝鏄庢樉銆?
Foo[] localArray = mArray;
// 2) 鑾峰彇闃熷垪闀垮害锛屽噺灏戞瘡娆¢亶鍘嗚闂彉閲忕殑闀垮害锛屾湁鏁堜紭鍖栥€?
int len = localArray.length;
for (int i = 0; i < len; ++i) {
sum += localArray[i].mSplat;
}
}
// 鍦ㄦ棤JIT鐨勮澶囦腑锛屾槸鏈€蹇殑閬嶅巻鏂瑰紡锛屽湪瀛樺湪JIT鐨勮澶囦腑锛屼笌one()宸笉澶氬揩銆?
public void two() {
int sum = 0;
for (Foo a : mArray) {
sum += a.mSplat;
}
}
鏃犳硶浣跨敤绱㈠紩鐨勬儏鍐?/h4>
- 鎿嶄綔绗?code>BETWEEN銆?code>LIKE銆?code>OR
- 琛ㄨ揪寮?/li>
CASE WHEN
鎺ㄨ崘
- 澶氫娇鐢ㄦ暣鍨嬬储寮曪紝鏁堢巼杩滈珮浜庡瓧绗︿覆绱㈠紩
- 鎼滅储鏃朵娇鐢⊿QL鍙傛暟(
"?", parameter
)浠f浛瀛楃涓叉嫾鎺ワ紙搴曞眰鏈夌壒娈婁紭鍖栦笌缂撳瓨锛?/li>
- 鏌ヨ闇€瑕佸灏戝氨limit澶氬皯锛堝鍒ゆ柇鏄惁鍚湁鍟ワ紝灏眑imit 1灏辫浜嗗槢锛?/li>
- 濡傛灉鍑虹幇寰堝鐨勫垪(濡俠lob绫诲瀷)锛岃€冭檻鏀惧湪鍗曠嫭琛ㄤ腑(鍦ㄦ煡璇㈡垨鑰呮洿鏂板叾浠栧垪鏁版嵁鏃堕槻姝笉蹇呰鐨勫ぇ鏁版嵁i/o褰卞搷鎬ц兘)
IV. JNI鎶夋嫨
Android JVM鐩稿叧鐭ヨ瘑锛屽彲鍙傜湅:聽ART銆丏alvik
Android JNI銆丯DK鐩稿叧鐭ヨ瘑锛屽彲鍙傜湅:聽NDK
JNI涓嶄竴瀹氭樉寰楁洿蹇紝鏈変簺浼氭洿鎱€?/p>
鐗圭偣: 涓嶇敤鍦ㄨ櫄鎷熸満鐨勬瀛愪笅鍐欎唬鐮?/p>
- 鍙互璋冪敤鏇村簳灞傜殑楂樻€ц兘鐨勪唬鐮佸簱 鈥?Good
- 濡傛灉鏄疍alvik锛屽皢鐪佸幓浜嗙敱JIT缂栬瘧鏈熻浆涓烘湰鍦颁唬鐮佺殑杩欎釜姝ラ銆?鈥?Good
- Java璋冪敤JNI鐨勮€楁椂杈僇ava璋冪敤Java鑲畾鏇存參锛岃櫧鐒堕殢鐫€JDK鐗堟湰鐨勫崌绾э紝宸窛宸茬粡瓒婃潵瓒婂皬(JDK1.6鐗堟湰鏄?鍊岼ava璋冪敤Java鏂规硶鐨勮€楁椂) 鈥?Bad
- 鍐呭瓨涓嶅湪Java Heap锛屾病鏈塐OM椋庨櫓锛屾湁鏁堝噺灏慻c銆?鈥?Good
涓€浜涢噸瑕佺殑鍙傛暟涔嬬被锛屼篃鍙互鑰冭檻鏀惧湪Native灞傦紝淇濊瘉瀹夊叏鎬с€傚弬鑰?聽Android搴旂敤绋嬪簭閫氱敤鑷姩鑴卞3鏂规硶鐮旂┒
VI. UI灞傞潰
鐩稿叧娣卞叆浼樺寲锛屽彲鍙傜湅Android缁樺埗甯冨眬鐩稿叧
瀵逛簬鍗¢】鐩稿叧鎺掓煡鎺ㄨ崘鍙傜湅:聽Android鎬ц兘浼樺寲妗堜緥鐮旂┒(涓?涓?a href="http://www.wld5.com/4065.html" rel="external" target="_blank">Android鎬ц兘浼樺寲妗堜緥鐮旂┒锛堜笅锛?/a>
- 鍑忓皯涓嶅繀瑕佺殑涓嶉€忔槑鑳屾櫙鐩镐簰瑕嗙洊锛屽噺灏戦噸缁橈紝鍥犱负GPU涓嶅緱涓嶄竴閬嶅張涓€閬嶇殑鐢昏繖浜涘浘灞?/li>
- 淇濊瘉UI绾跨▼涓€娆″畬鏁寸殑缁樺埗(measure銆乴ayout銆乨raw)涓嶈秴杩?6ms(60Hz)锛屽惁鍒欏氨浼氬嚭鐜版帀甯э紝鍗¢】鐨勭幇璞?/li>
- 鍦║I绾跨▼涓绻佺殑璋冨害涓紝灏介噺灏戠殑瀵硅薄鍒涘缓锛屽噺灏慻c绛夈€?/li>
- 鍒嗘鍔犺浇锛堝噺灏戜换鍔¢绮掞級銆侀鍔犺浇銆佸紓姝ュ姞杞?鍖哄埆鍑鸿€楁椂浠诲姟锛岄噰鐢ㄥ紓姝ュ姞杞?
1. 鍝嶅簲寮忕紪绋?/h4>
濡傛灉宸茬煡澶ф闇€瑕佸澶э紝灏辩洿鎺ョ粰鍒濆澶у皬锛屽噺灏戞墿瀹规椂棰濆寮€閿€銆?/p>
ArrayList
: 閲岄潰灏变竴鏁扮粍锛屽唴瀛樺皬锛屾湁搴忓彇鍊煎揩锛屾墿瀹规晥鐜囦綆LinkedList
: 閲岄潰灏变竴鍙屽悜閾捐〃锛屽唴瀛樺ぇ锛岄殢鏈烘彃鍏ュ垹闄ゅ揩锛屾墿瀹规晥鐜囬珮銆?/li>
HashSet
: 閲岄潰灏变竴涓?code>HashMap锛岀敤key瀵瑰瀛樺偍锛岀洰鐨勫氨鏄笉鍏佽閲嶅鍏冪礌銆?/li>
ConcurrentHashMap
: 绾跨▼瀹夊叏锛岄噰鐢ㄧ粏鍒嗛攣锛岄攣棰楃矑鏇村皬锛屽苟鍙戞€ц兘鏇翠紭Collections.synchronizedMap
: 绾跨▼瀹夊叏锛岄噰鐢ㄥ綋鍓嶅璞′綔涓洪攣锛岄绮掕緝澶э紝骞跺彂鎬ц兘杈冨樊銆?/li>
SparseArray
銆?code>SparseBooleanArray銆?code>SparseIntArray: 閽堝Key涓?code>Int銆?code>Boolean杩涜浜嗕紭鍖栵紝閲囩敤浜屽垎娉曟煡鎵撅紝绠€鍗曟暟缁勫瓨鍌ㄣ€傜浉姣?code>HashMap鑰岃█锛?code>HashMap姣忔坊鍔犱竴涓暟鎹紝澶х害浼氶渶瑕佺敵璇烽澶栫殑32瀛楄妭鐨勬暟鎹紝鍥犳Sparsexxx
鍦ㄥ唴瀛樻柟闈㈢殑寮€閿€浼氬皬寰堝銆?/li>
append
鍒颁竴涓?code>StringBuffer涓婏紝灏辨敼涓轰紶鍏?code>StringBuffer鐩存帴append
涓婂幓锛岄伩鍏嶅垱寤轰竴涓煭鐢熷懡鍛ㄦ湡鐨勪复鏃跺璞★紱2) 濡傛灉浣跨敤鐨勫瓧绗︿覆鏄埅鍙栬嚜鏌愪竴涓瓧绗︿覆锛屽氨鐩存帴浠庨偅涓瓧绗︿覆涓婇潰substring
锛屼笉瑕佹嫹璐濅竴浠斤紝鍥犱负閫氳繃substring
铏界劧鍒涘缓浜嗘柊鐨?code>String瀵硅薄锛屼絾鏄叡浜簡閲岄潰鐨?code>char鏁扮粍涓殑char
瀵硅薄锛屽噺灏戜簡杩欏潡瀵硅薄鐨勫垱寤猴紱閲忎娇鐢ㄥ涓竴缁存暟缁勶紝鍏舵€ц兘楂樹簬澶氱淮鏁扮粍锛?code>int鏁扮粍鎬ц兘杩滃ぇ浜?code>Integer鏁扮粍鎬ц兘锛?/li>
static
锛岃繖鏍疯皟鐢ㄦ椂鍙互鎻愬崌15%~20%鐨勯€熷害锛屽洜涓轰笉闇€瑕佸垏鎹㈠璞$姸鎬併€?/li>
Class
棣栨鍒濆鍖栨椂锛屼笉闇€瑕佽皟鐢?code><clinit>鏉ュ垱寤?code>static鏂规硶锛岃€屾槸鍦ㄧ紪璇戞椂灏辩洿鎺ュ皢甯搁噺鏇挎崲浠g爜涓娇鐢ㄧ殑浣嶇疆銆?/li>
get/set
璁块棶鎴愬憳鍙橀噺锛岃櫧鐒惰繖鍦ㄨ瑷€鐨勫紑鍙戜腑鏄竴涓ソ鐨勪範鎯紝浣嗘槸Android铏氭嫙鏈轰腑锛屽鏂规硶鐨勮皟鐢ㄥ紑閿€杩滃ぇ浜庡鍙橀噺鐨勭洿鎺ヨ闂€傚湪娌℃湁JIT鐨勬儏鍐典笅锛岀洿鎺ョ殑鍙橀噺璁块棶姣旇皟鐢ㄦ柟娉曞揩3鍊嶏紝鍦↗IT涓嬶紝鐩存帴鐨勫彉閲忚闂洿鏄瘮璋冪敤鏂规硶蹇?鍊?鏂规硶/鍙橀噺
灏佽涓€灞傚寘鍙鐨勬柟娉曪紝瀹炵幇璁╁唴閮ㄧ被璁块棶杩欎簺绉佹湁鐨?code>鏂规硶/鍙橀噺锛屾牴鎹墠闈㈡垜浠湁鎻愬埌璇存柟娉曠殑璋冪敤寮€閿€澶т簬鍙橀噺鐨勮皟鐢紝鍥犳杩欐牱浣垮緱鎬ц兘鍙樺樊锛屾墍浠ユ垜浠湪缂栫爜鐨勬椂鍊欏彲浠ヨ€冭檻鐩存帴灏嗛渶瑕佽鍐呴儴绫昏皟鐢ㄧ殑澶栭儴绫荤鏈?code>鏂规硶/鍙橀噺锛屾敼涓哄寘鍙銆?/li>
double
鐨勬€ц兘涓?code>float鐨勬€ц兘鍑犱箮娌℃湁宸埆锛屼絾鏄粠澶у皬涓婇潰double
鏄?code>float鐨勪袱鍊嶇殑澶у皬銆?/li>
String.indexOf()
鐩稿叧鐨凙PI锛孌alvik灏嗕細鏇挎崲涓哄唴閮ㄦ柟娉曪紱System.arraycopy()
鏂规硶鍦∟exus One鎵嬫満涓婏紝浼氭瘮鎴戜滑涓婂眰鍐欑殑绫讳技鏂规硶鐨勬墽琛岄€熷害蹇?鍊嶃€?/li>
灏介噺浣跨敤Iterable
鑰屼笉鏄€氳繃闀垮害鍒ゆ柇鏉ヨ繘琛岄亶鍘嗐€?/p>
- 鎿嶄綔绗?code>BETWEEN銆?code>LIKE銆?code>OR
- 琛ㄨ揪寮?/li>
CASE WHEN
鎺ㄨ崘
- 澶氫娇鐢ㄦ暣鍨嬬储寮曪紝鏁堢巼杩滈珮浜庡瓧绗︿覆绱㈠紩
- 鎼滅储鏃朵娇鐢⊿QL鍙傛暟(
"?", parameter
)浠f浛瀛楃涓叉嫾鎺ワ紙搴曞眰鏈夌壒娈婁紭鍖栦笌缂撳瓨锛?/li> - 鏌ヨ闇€瑕佸灏戝氨limit澶氬皯锛堝鍒ゆ柇鏄惁鍚湁鍟ワ紝灏眑imit 1灏辫浜嗗槢锛?/li>
- 濡傛灉鍑虹幇寰堝鐨勫垪(濡俠lob绫诲瀷)锛岃€冭檻鏀惧湪鍗曠嫭琛ㄤ腑(鍦ㄦ煡璇㈡垨鑰呮洿鏂板叾浠栧垪鏁版嵁鏃堕槻姝笉蹇呰鐨勫ぇ鏁版嵁i/o褰卞搷鎬ц兘)
IV. JNI鎶夋嫨
Android JVM鐩稿叧鐭ヨ瘑锛屽彲鍙傜湅:聽ART銆丏alvik
Android JNI銆丯DK鐩稿叧鐭ヨ瘑锛屽彲鍙傜湅:聽NDK
JNI涓嶄竴瀹氭樉寰楁洿蹇紝鏈変簺浼氭洿鎱€?/p>
鐗圭偣: 涓嶇敤鍦ㄨ櫄鎷熸満鐨勬瀛愪笅鍐欎唬鐮?/p>
- 鍙互璋冪敤鏇村簳灞傜殑楂樻€ц兘鐨勪唬鐮佸簱 鈥?Good
- 濡傛灉鏄疍alvik锛屽皢鐪佸幓浜嗙敱JIT缂栬瘧鏈熻浆涓烘湰鍦颁唬鐮佺殑杩欎釜姝ラ銆?鈥?Good
- Java璋冪敤JNI鐨勮€楁椂杈僇ava璋冪敤Java鑲畾鏇存參锛岃櫧鐒堕殢鐫€JDK鐗堟湰鐨勫崌绾э紝宸窛宸茬粡瓒婃潵瓒婂皬(JDK1.6鐗堟湰鏄?鍊岼ava璋冪敤Java鏂规硶鐨勮€楁椂) 鈥?Bad
- 鍐呭瓨涓嶅湪Java Heap锛屾病鏈塐OM椋庨櫓锛屾湁鏁堝噺灏慻c銆?鈥?Good
涓€浜涢噸瑕佺殑鍙傛暟涔嬬被锛屼篃鍙互鑰冭檻鏀惧湪Native灞傦紝淇濊瘉瀹夊叏鎬с€傚弬鑰?聽Android搴旂敤绋嬪簭閫氱敤鑷姩鑴卞3鏂规硶鐮旂┒
VI. UI灞傞潰
鐩稿叧娣卞叆浼樺寲锛屽彲鍙傜湅Android缁樺埗甯冨眬鐩稿叧
瀵逛簬鍗¢】鐩稿叧鎺掓煡鎺ㄨ崘鍙傜湅:聽Android鎬ц兘浼樺寲妗堜緥鐮旂┒(涓?涓?a href="http://www.wld5.com/4065.html" rel="external" target="_blank">Android鎬ц兘浼樺寲妗堜緥鐮旂┒锛堜笅锛?/a>
- 鍑忓皯涓嶅繀瑕佺殑涓嶉€忔槑鑳屾櫙鐩镐簰瑕嗙洊锛屽噺灏戦噸缁橈紝鍥犱负GPU涓嶅緱涓嶄竴閬嶅張涓€閬嶇殑鐢昏繖浜涘浘灞?/li>
- 淇濊瘉UI绾跨▼涓€娆″畬鏁寸殑缁樺埗(measure銆乴ayout銆乨raw)涓嶈秴杩?6ms(60Hz)锛屽惁鍒欏氨浼氬嚭鐜版帀甯э紝鍗¢】鐨勭幇璞?/li>
- 鍦║I绾跨▼涓绻佺殑璋冨害涓紝灏介噺灏戠殑瀵硅薄鍒涘缓锛屽噺灏慻c绛夈€?/li>
- 鍒嗘鍔犺浇锛堝噺灏戜换鍔¢绮掞級銆侀鍔犺浇銆佸紓姝ュ姞杞?鍖哄埆鍑鸿€楁椂浠诲姟锛岄噰鐢ㄥ紓姝ュ姞杞?
1. 鍝嶅簲寮忕紪绋?/h4>
RxJava聽(鍝嶅簲寮忕紪绋嬶紝浠g爜鏇村姞绠€娲侊紝寮傛澶勭悊鏇村揩蹇嵎銆佸紓甯稿鐞嗘洿鍔犲交搴曘€佹暟鎹閬撶悊蹇?
鐩稿叧浜嗚В鍙互鍙傜湅:聽RxJava
2. 鍥剧墖鍔犺浇:
- 灏忓瀷蹇嵎:聽Picasso聽(鎺ュ彛骞插噣銆佹敮鎸乷khttp銆佸姛鑳藉己澶с€佺ǔ瀹氥€侀珮鏁? 鍙互寤惰:聽PhotoGallery銆乂olley銆丳icasso 姣旇緝)
- 澶ч」鐩€冭檻:聽Fresco聽(2.5M锛宲ipeline瑙e喅璧勬簮绔炰簤銆丯ative Heep瑙e喅OOM锛岀殑鍚屾椂鍑忓皯GC)
4. 缃戠粶鍩哄眰:
Retrofit: 闈炲父濂界敤鐨凴EST Client锛岀粨鍚圧xJava绠€鍗旳PI瀹炵幇銆佺被鍨嬪畨鍏紝绠€鍗曞揩鎹?/p>
5. 鏁版嵁搴撳眰:
Realm: 鏁堢巼鏋侀珮(Falcon Pro 3鐨勪綔鑰匤oaquim鐢ㄤ簡璇ュ簱浠ュ悗锛屾墍鏈夋暟鎹簱鎿嶄綔閮芥斁鍒颁簡UI绾跨▼)锛堝熀浜嶵ightDB锛屽簳灞侰++闂簮锛孞ava灞傚紑婧愶紝绠€鍗曚娇鐢紝鎬ц兘杩滈珮浜嶴QLite绛夛級
6. Crash涓婃姤:
Fabric: 鍏ㄩ潰鐨勪俊鎭?鏂扮増鏈繕鏀寔JNI Crash鑾峰彇鍜屼笂鎶?銆佺ǔ瀹氱殑鏁版嵁銆佸強鏃剁殑閫氱煡銆佸己澶х殑鍙嶆贩娣?鍏跺疄鍦ㄦ贩娣嗗悗鏈変笂浼爉apping)
Leakcanary Square鐨勪竴娆続ndroid/Java鍐呭瓨娉勬紡妫€娴嬪伐鍏?/a>)
8. 鍏朵粬
- 浠g爜璐ㄩ噺:聽phabricator 鐨刟rc diff聽(灏介噺灏忛绮掑害鐨刟rc diff 涓巙pdate review)锛屽叾瀹炰篃鍙互鐪嬬湅Google鏄浣曞仛鐨?聽绗旇-璋锋瓕鏄浣曞仛浠g爜瀹℃煡鐨?/a>锛岃繕鏈変竴鐐圭殑TODO瑕佸啓濂絛eadline涓巑aster
- 缂栧寘绠$悊:聽Gitlab CI聽(缁撳悎Gitlab锛屽姛鑳藉鐢紝鏂逛究)
VIII. 鍐呭瓨
鏍规嵁璁惧鍙敤鍐呭瓨鐨勪笉鍚岋紝姣忎釜璁惧缁欏簲鐢ㄩ檺瀹氱殑Heap澶у皬鏄湁闄愮殑锛屽綋杈惧埌瀵瑰簲闄愬畾鍊艰繕鐢宠绌洪棿鏃讹紝灏变細鏀跺埌OutOfMemoryError
鐨勫紓甯搞€?/p>
1. 鍐呭瓨绠$悊
Android鏍规嵁涓嶅悓鐨勮繘绋嬩紭鍏堢骇锛屽涓嶅悓杩涚▼杩涜鍥炴敹鏉ユ弧瓒冲唴瀛樼殑渚涙眰锛屽彲浠ュ弬鐓ц繖绡囨枃绔?聽Android涓嚎绋嬨€佽繘绋嬩笌缁勪欢鐨勫叧绯?/a>銆?br />
鍦ㄥ悗鍙拌繘绋嬬殑LRU闃熷垪涓紝闄や簡LRU涓轰富瑕佺殑瑙勫垯浠ュ锛岀郴缁熶篃浼氭牴鎹潃姝讳竴涓悗鍙拌繘绋嬫墍鑾峰緱鐨勫唴瀛樻槸鍚︽洿澶氫綔涓轰竴瀹氱殑鍙傝€冧緷鎹紝鍥犳鍚庡彴杩涚▼涓轰簡淇濇椿锛屽敖閲忓皯鐨勫唴瀛橈紝灏藉彲鑳界殑閲婃斁鍐呭瓨涔熸槸鍗佸垎蹇呰鐨勩€?/p>
- 灏藉彲鑳界殑缂╃煭
Service
鐨勫瓨娲诲懆鏈燂紙鍙互鑰冭檻鐩存帴浣跨敤鎵ц瀹屼换鍔$洿鎺ュ叧闂嚜宸辩殑IntentService
锛夛紝涔熷氨鏄鍦⊿ervice娌℃湁浠讳綍浠诲姟鐨勬椂鍊欙紝灏藉彲鑳界殑灏嗗叾鍏抽棴锛屼互鍑忓皯绯荤粺璧勬簮鐨勬氮璐广€?/li>
- 鍙互閫氳繃绯荤粺鏈嶅姟
ActivityManager
涓殑getMemoryClass()
鑾风煡褰撳墠璁惧鍏佽姣忎釜搴旂敤澶ф鍙互鏈夊灏戝厗鐨勫唴瀛樹娇鐢?濡傛灉鍦?code>AndroidManifest璁剧疆浜?code>largeHeap=true锛屼娇鐢?code>getLargeMemoryClass()鑾风煡)锛屽苟涓旇搴旂敤涓殑鍐呭瓨濮嬬粓浣庝簬杩欎釜鍊硷紝閬垮厤OOM銆?/li>
- 鐩稿浜庨潤鎬佸父閲忚€岃█锛岄€氬父
Enum
鏋氫妇闇€瑕佸ぇ浜庝袱鍊嶇殑鍐呭瓨绌洪棿鏉ュ瓨鍌ㄧ浉鍚岀殑鏁版嵁銆?/li>
- Java涓殑姣忎釜
class
(鎴栬€呭尶鍚嶇被)澶х害鍗犵敤500瀛楄妭銆?/li>
- 姣忎釜瀵硅薄瀹炰緥澶х害寮€閿€12~16瀛楄妭鐨勫唴瀛樸€?/li>
onTrimMemory()
鍥炶皟澶勭悊
鐩戝惉onTrimMemory()
鐨勫洖璋冿紝鏍规嵁涓嶅悓鐨勫唴瀛樼瓑绾э紝鍋氱浉搴旂殑閲婃斁浠ユ璁╃郴缁熻祫婧愭洿濂界殑鍒╃敤锛屼互鍙婅嚜宸辩殑杩涚▼鍙互鏇村ソ鐨勪繚娲汇€?/p>
TRIM_MEMORY_UI_HIDDEN
鏍规嵁璁惧鍙敤鍐呭瓨鐨勪笉鍚岋紝姣忎釜璁惧缁欏簲鐢ㄩ檺瀹氱殑Heap澶у皬鏄湁闄愮殑锛屽綋杈惧埌瀵瑰簲闄愬畾鍊艰繕鐢宠绌洪棿鏃讹紝灏变細鏀跺埌OutOfMemoryError
鐨勫紓甯搞€?/p>
Android鏍规嵁涓嶅悓鐨勮繘绋嬩紭鍏堢骇锛屽涓嶅悓杩涚▼杩涜鍥炴敹鏉ユ弧瓒冲唴瀛樼殑渚涙眰锛屽彲浠ュ弬鐓ц繖绡囨枃绔?聽Android涓嚎绋嬨€佽繘绋嬩笌缁勪欢鐨勫叧绯?/a>銆?br /> 鍦ㄥ悗鍙拌繘绋嬬殑LRU闃熷垪涓紝闄や簡LRU涓轰富瑕佺殑瑙勫垯浠ュ锛岀郴缁熶篃浼氭牴鎹潃姝讳竴涓悗鍙拌繘绋嬫墍鑾峰緱鐨勫唴瀛樻槸鍚︽洿澶氫綔涓轰竴瀹氱殑鍙傝€冧緷鎹紝鍥犳鍚庡彴杩涚▼涓轰簡淇濇椿锛屽敖閲忓皯鐨勫唴瀛橈紝灏藉彲鑳界殑閲婃斁鍐呭瓨涔熸槸鍗佸垎蹇呰鐨勩€?/p>
Service
鐨勫瓨娲诲懆鏈燂紙鍙互鑰冭檻鐩存帴浣跨敤鎵ц瀹屼换鍔$洿鎺ュ叧闂嚜宸辩殑IntentService
锛夛紝涔熷氨鏄鍦⊿ervice娌℃湁浠讳綍浠诲姟鐨勬椂鍊欙紝灏藉彲鑳界殑灏嗗叾鍏抽棴锛屼互鍑忓皯绯荤粺璧勬簮鐨勬氮璐广€?/li>
ActivityManager
涓殑getMemoryClass()
鑾风煡褰撳墠璁惧鍏佽姣忎釜搴旂敤澶ф鍙互鏈夊灏戝厗鐨勫唴瀛樹娇鐢?濡傛灉鍦?code>AndroidManifest璁剧疆浜?code>largeHeap=true锛屼娇鐢?code>getLargeMemoryClass()鑾风煡)锛屽苟涓旇搴旂敤涓殑鍐呭瓨濮嬬粓浣庝簬杩欎釜鍊硷紝閬垮厤OOM銆?/li>
Enum
鏋氫妇闇€瑕佸ぇ浜庝袱鍊嶇殑鍐呭瓨绌洪棿鏉ュ瓨鍌ㄧ浉鍚岀殑鏁版嵁銆?/li>
class
(鎴栬€呭尶鍚嶇被)澶х害鍗犵敤500瀛楄妭銆?/li>
onTrimMemory()
鍥炶皟澶勭悊鐩戝惉onTrimMemory()
鐨勫洖璋冿紝鏍规嵁涓嶅悓鐨勫唴瀛樼瓑绾э紝鍋氱浉搴旂殑閲婃斁浠ユ璁╃郴缁熻祫婧愭洿濂界殑鍒╃敤锛屼互鍙婅嚜宸辩殑杩涚▼鍙互鏇村ソ鐨勪繚娲汇€?/p>
TRIM_MEMORY_UI_HIDDEN
褰撳洖璋冨洖鏉ョ殑鏃跺€欙紝璇存槑搴旂敤鐨刄I瀵圭敤鎴蜂笉鍙鐨勶紝姝ゆ椂閲婃斁UI浣跨敤鐨勪竴浜涜祫婧愩€傝繖涓笉鍚屼簬onStop()
锛?code>onStop()鐨勫洖璋冿紝鏈夊彲鑳戒粎浠呮槸褰撳墠搴旂敤涓繘鍏ヤ簡鍙﹀涓€涓?code>Activity銆?/p>
2. 閬垮厤鍐呭瓨娉勬紡鐩稿叧
- 鏃犳硶瑙e喅鐨勬硠婕忥紙濡傜郴缁熷簳灞傚紩璧风殑)绉昏嚦鐙珛杩涚▼(濡?.x鏈哄櫒瀛樺湪webview鐨勫唴瀛樻硠婕?
- 澶у浘鐗囪祫婧?鍏ㄥ睆鍥剧墖璧勬簮锛岃涓嶆斁鍦?code>assets涓嬶紝瑕佷笉鏀惧湪
nodpi
涓嬶紝瑕佷笉閮藉甫锛屽惁鍒欑缉鏀句細甯︽潵棰濆鑰楁椂涓庡唴瀛橀棶棰?/li>
- 4.x鍦?code>AndroidManifest涓厤缃?code>largeHeap=true锛屼竴鑸琩vm heep鏈€澶у€煎彲澧炲ぇ50%浠ヤ笂銆備絾鏄病鏈夌壒娈婃槑纭殑闇€瑕侊紝灏藉彲鑳界殑閬垮厤杩欐牱璁剧疆锛屽洜涓鸿繖鏍蜂竴鏉ュ緢鍙兘闅愯棌浜嗘秷鑰椾簡瀹屽叏娌℃湁蹇呰鐨勫唴瀛樼殑闂銆?/li>
- 鍦?code>Activity#onDestory浠ュ悗锛岄亶鍘嗘墍鏈塚iew锛屽共鎺夋墍鏈塚iew鍙兘鐨勫紩鐢?閫氬父娉勬紡涓€涓狝ctivity锛岃繛甯︽硠婕忓叾涓婄殑View锛岀劧鍚庡氨娉勬紡浜嗗ぇ浜庡叏灞忓浘鐗囩殑鍐呭瓨)銆?/li>
- 涓囬噾娌? 闈欐€佸寲鍐呴儴绫伙紝浣跨敤
WeakReference
寮曠敤澶栭儴绫伙紝闃叉鍐呴儴绫婚暱鏈熷瓨鍦紝娉勬紡浜嗗閮ㄧ被鐨勯棶棰樸€?/li>
3. 鍥剧墖
Android 2.3.x鎴栨洿浣庣増鏈殑璁惧锛屾槸灏嗘墍鏈夌殑Bitmap瀵硅薄瀛樺偍鍦╪ative heap锛屽洜姝ゆ垜浠緢闅鹃€氳繃宸ュ叿鍘绘娴嬪叾鍐呭瓨澶у皬锛屽湪Android 3.0鎴栨洿楂樼増鏈殑璁惧锛屽凡缁忚皟鏁翠负瀛樺偍鍒颁簡姣忎釜搴旂敤鑷韩鐨凞alvik heap涓簡銆?/p>
- 鍏ㄥ眬缁熶竴
BitmapFactory#decode
鍑哄彛锛屾崟鑾锋澶刣ecode oom锛屾帶鍒堕暱瀹斤紙灏忎簬灞忓箷鍒嗚鲸鐜囧ぇ灏?锛?/li>
- 濡傛灉閲囩敤RGB_8888 oom浜嗭紝灏濊瘯RGB_565(鐩告瘮鍐呭瓨灏忎竴鍗婁互涓?wh2(bytes)))
- 濡傛灉杩樿€冭檻2.x鏈哄櫒鐨勮瘽锛岃缃?code>BitmapFactory#options鐨?code>InNativeAlloc鍙傛暟涓簍rue锛屾鏃禿ecode鐨勫唴瀛樹笉浼氫笂鎶ュ埌dvm涓紝渚夸笉浼歰om銆?/li>
- 寤鸿閲囩敤lingochamp/QiniuImageLoader鐨勬柟寮忥紝鎵€鏈夊浘鐗囩殑鎿嶄綔閮芥斁鍒颁簯绔鐞嗭紝鏈湴榛樿浣跨敤Webp锛屽苟涓旇幏鍙栫殑姣忎釜浣嶇疆鐨勫浘鐗囷紝灏介噺閫氳繃绮剧‘鐨勫ぇ灏忔寜闇€鑾峰彇锛岄伩鍏嶅唴瀛樻病蹇呰鐨勬秷鑰椼€?/li>
IX. 绾跨▼
- 閲囩敤鍏ㄥ眬绾跨▼姹犵鐞嗕綋绯伙紝鏈夋晥閬垮厤閲庣嚎绋嬨€傚彲鍙傜収聽ThreadDebugger-demo/DemoThreadPoolCentral.java
- 缁撳悎鍏ㄥ眬绾跨▼姹犵鐞嗕綋绯伙紝浣跨敤ThreadDebugger鐩戞帶绾跨▼锛岄伩鍏嶇嚎绋嬫硠婕忕殑瀛樺湪銆?/li>
360鎵嬫満鍗+ Android寮€鍙?InfoQ瑙嗛 鎬荤粨
nodpi
涓嬶紝瑕佷笉閮藉甫锛屽惁鍒欑缉鏀句細甯︽潵棰濆鑰楁椂涓庡唴瀛橀棶棰?/li>
WeakReference
寮曠敤澶栭儴绫伙紝闃叉鍐呴儴绫婚暱鏈熷瓨鍦紝娉勬紡浜嗗閮ㄧ被鐨勯棶棰樸€?/li>
Android 2.3.x鎴栨洿浣庣増鏈殑璁惧锛屾槸灏嗘墍鏈夌殑Bitmap瀵硅薄瀛樺偍鍦╪ative heap锛屽洜姝ゆ垜浠緢闅鹃€氳繃宸ュ叿鍘绘娴嬪叾鍐呭瓨澶у皬锛屽湪Android 3.0鎴栨洿楂樼増鏈殑璁惧锛屽凡缁忚皟鏁翠负瀛樺偍鍒颁簡姣忎釜搴旂敤鑷韩鐨凞alvik heap涓簡銆?/p>
BitmapFactory#decode
鍑哄彛锛屾崟鑾锋澶刣ecode oom锛屾帶鍒堕暱瀹斤紙灏忎簬灞忓箷鍒嗚鲸鐜囧ぇ灏?锛?/li>
Application
瀵规墦寮€鐨勮€楁椂杩涜缁熻锛岃瀵熷叾鍙樺寲锛岄伩鍏嶅洜涓鸿凯浠e鑷存煇浜涢〉闈㈤潪棰勬湡鐨勬墦寮€鍙樻參銆?/li>
XI. 宸ュ叿
- TraceView鍙互鏈夋晥鐨勬洿閲嶄竴娈垫椂闂村唴鍝釜鏂规硶鏈€鑰楁椂锛屼絾鏄渶瑕佹敞鎰忕殑鏄洰鍓峊raceView鍦ㄥ綍鍒惰繃涓紝浼氬叧闂璊IT锛屽洜姝や篃璁告湁浜汮IT鐨勪紭鍖栧湪TraceView杩囩▼琚拷鐣ヤ簡銆?/li>
- Systrace鍙互鏈夋晥鐨勫垎鏋愭帀甯х殑鍘熷洜銆?/li>
- HierarchyViewer鍙互鏈夋晥鐨勫垎鏋怴iew灞傜骇浠ュ強甯冨眬姣忎釜鑺傜偣
measure
銆?code>layout銆?code>draw鐨勮€楁椂銆?/li>
XII. 鍏朵粬
final
鑳界敤灏辩敤锛堥珮鏁? 缂栬瘧鍣ㄥ湪璋冪敤final
鏂规硶鏃讹紝浼氳浆鍏ュ唴宓屾満鍒讹級- 鎳掗鍔犺浇锛屽绠€鍗曠殑
ListView
銆?code>RecyclerView绛夋粦鍔ㄥ垪琛ㄦ帶浠讹紝鍋滅暀鍦ㄥ綋鍓嶉〉闈㈢殑鏃跺€欙紝鍙互鑰冭檻鐩存帴棰勫姞杞戒笅涓〉闈㈡墍闇€鍥剧墖 - 鏅鸿兘棰勫姞杞斤紝閫氳繃鏉冮噸绛夋柟寮忕粨鍚堜笟鍔″眰闈紝鍒嗘瀽鍑哄摢浜涙洿鏈夊彲鑳借鐢ㄦ埛娴忚浣跨敤锛岀劧鍚庡啀鍦ㄦ煇涓彲鑳界殑鏃跺埢杩涜棰勫姞杞姐€傚锛岃繘鍏ユ湅鍙嬪湀涔嬪墠閫氳繃鐢ㄦ埛琛屼负锛屾櫤鑳介鍔犺浇閮ㄥ垎鍘熷浘銆?/li>
- 鍋氬ソ鏈夋崯浣撻獙鐨勫噯澶囷紝鍦ㄤ竴浜涙棤娉曢伩鍏嶇殑闂闈㈠墠鍋氬ソ鏈夋崯浣撻獙锛堝锛岄潪UI杩涚▼crash锛屽彲浠ヨ嚜宸辫В鍐冲氨涓嶈璁╃敤鎴锋劅鐭ワ紝鎴栬€匲I杩涚▼crash浜嗭紝鍋氬ソ鍦烘櫙鎭㈠锛?/li>
- 鍋氬ソ鍚勯」鏈夋晥鐩戞帶锛歝rash(娉ㄦ剰杩樻湁JNI鐨?銆乤nr(瀹氭湡鎵弿鏂囦欢)銆佹帀甯?缁樺埗鐩戞帶銆乤ctivity鐢熷懡鍛ㄦ湡鐩戞帶绛?銆佸紓甯哥姸鎬佺洃鎺?鏈湴Log鏍规嵁闇€瑕佷笉鍚岀骇鍒墦Log骞堕€夋嫨鎬т笂鎶ョ洃鎺?绛?/li>
- 鏂囦欢瀛樺偍鎺ㄨ崘鏀惧湪
/sdcard/Android/data/[package name]/
閲?鍦ㄥ簲鐢ㄥ嵏杞芥椂锛屼細闅忓嵆鍒犻櫎)(Context#getExternalFilesDir()
)锛岃€岄潪/sdcard/
鏍圭洰褰曞缓鏂囦欢澶癸紙鑺傛搷闂锛?/li> - 閫氳繃gradle鐨?code>shrinkResources涓?code>minifyEnabled鍙傛暟鍙互绠€鍗曞揩閫熺殑鍦ㄧ紪鍖呯殑鏃跺€欒嚜鍔ㄥ垹闄ゆ棤鐢ㄨ祫婧?/li>
- 鐢变簬resources.arsc鍦╝pi8浠ュ悗锛宎apt涓粯璁ら噰鐢║TF-8缂栫爜锛屽鑷磋祫婧愪腑澶ч兘鏄腑鏂囩殑resources.arsc鐩告瘮閲囩敤UTF-16缂栫爜鏇村ぇ锛屾鏃讹紝鍙互鑰冭檻aapt涓寚瀹氫娇鐢║TF-16
- 璋锋瓕寤鸿锛屽ぇ浜?0M鐨勫ぇ鍨嬪簲鐢ㄨ€冭檻瀹夎鍒癝D鍗′笂:聽App Install Location
- 褰撶劧杩愮淮涔熸槸涓€鏂归潰:聽Optimize Your App
- 鍦ㄥ凡鐭ュ苟涓斾笉闇€瑕佹爤鏁版嵁鐨勬儏鍐典笅锛屽氨娌℃湁蹇呰闇€瑕佷娇鐢ㄥ紓甯革紝鎴栧垱寤?code>Throwable鐢熸垚鏍堝揩鐓ф槸涓€椤硅€楁椂鐨勫伐浣溿€?/li>
- 闇€瑕佸崄鍒嗘槑纭彂甯冪幆澧冧互鍙婃祴璇曠幆澧冿紝鏄庣‘浠呬粎涓轰簡鏂逛究娴嬭瘯鐨勪唬鐮佷互鍙婂伐鍏峰湪鍙戝竷鐜涓嶄細琚甫涓娿€?/li>
相关文章
- 暂无相关文章
用户点评