導航:首頁 > 操作系統 > lmkandroid

lmkandroid

發布時間:2025-05-20 23:37:13

Ⅰ 用戶空間的LMKD

原文: https://source.android.com/devices/tech/perf/lmkd

本文描述了Android 9中添加的用戶空間lowmemorykiller守護程序(lmkd)功能以及如何配置它們。

以前,Android使用內核lowmemorykiller驅動程序終止不必要的進程來緩解內存壓力。這種機制死板且依賴於硬編碼值,而且從內核4.12開始,lowmemorykiller驅動程序被排除在上游內核之外。

用戶空間 lmkd 進程實現同樣的功能,用已有的內核機制來檢測和估計內存壓力。它使用內核生成的vmpressure事件來獲取有關內存壓力級別的通知。它還可以使用內存cgroup功能根據其重要性限制分配給每個進程的內存資源。

從Android 9開始,如果未檢測到內核中的lowmemorykiller驅動程序,則用戶空間 lmkd 會激活。註:用戶空間 lmkd 需要內核支持內存cgroup。因此,要切換到用戶空間 lmkd ,應配置以下設置編譯內核:

lmkd 同時支持新的和傳統模式的終止策略,新的終止策略基於vmpressure事件,進程的重要性以及交換利用率等其他提示;傳統模式的 lmkd 終止策略就像內核lowmemorykiller 驅動程序那樣做出終止決定。

新的終止策略因低內存和高性能設備而異。在低內存設備的情況下,系統應該比正常操作模式承受更高的內存壓力; 在高性能設備上,內存壓力應被視為異常情況,在影響整體性能之前應予以修復。 ro.config.low_ram 屬性允許選擇一種模式而非另一種。有關設置此屬性的說明,請參閱 低RAM配置 。

在傳統模式下, lmkd 根據可用內存和文件緩存閾值進行終止決策。通過將 ro.lmk.use_minfree_levels 屬性設置為 true 來啟用此模式。

配置 lmkd 以下屬性:

註: mem_pressure = RAM使用率/ RAM_and_swap使用率%

以下是一個設備配置示例:

Ⅱ 手機總是容易滿內存,到底是什麼在占內存

問這個問題,應該是Android手機的玩家吧,而且你對Android的內存機制也不了解,簡單來說,Android中的內存就是給你用的,不用還不正常,根本不用擔心內存怎麼只剩下幾百M呢。

像我們這些在Windows陪伴下成長起來的玩家,「內存不足」經常遇到,但是Android有著與Windows完全不一樣的內存管理機制,Windows上的那一套,對Android並沒用。

Android中可用內存是個沒意義的數字

Windows中一旦程序被關閉,分配的內存也就釋放出來,然而在Android中運行過的應用絕大多數是從前台轉入到後台,並保留在內存中並不會也不需要主動釋放,這樣下次再運行該應用時,可以更快的啟動。

無論手機的物理內存有多大,Android都能將其充分利用,將需要用到的數據從硬碟讀入到內存,以提高數據訪問性能,也就是說, 在Android系統中,可用內存越小,表明其調用的數據就越多,訪問的命中率就越高,系統也就越快 。

你可能會問,當打開的應用越來越多,佔用的內存總會爆滿的,那怎麼辦呢?

Android有著優秀的內存回收機制

Android使用了一個名為Low Memory Killer(LMK)的機制來管理內存,當內存出現不足時,LMK就開始揮舞屠刀殺掉一些進程以獲得新的內存空間。

Android有一套獨特的進程管理,它會以oom_adj來表示進程的重要性,oom_adj的值越小,則重要性越高,oom_adj的值越大,該進程被系統選中殺掉的可能性越高。

Android默認的進程管理策略

為了更好的評估進程的重要性,Android將進程分為六類,如下所述:

前台進程:oom_adj=0,指正在當前屏幕上顯示的進程和一些系統進程,一旦你回到主界面 或切換到其它程序,當前進程變為隱藏進程,前台進程是不會殺掉的;

可見進程:oom_adj=1,可見進程雖然不在前台,但依然可見,如widget、輸入法等,這部分進程也非常重要,基本上不可能被殺掉;

次要服務:oom_adj=2,目前正在運行的一些服務,如下載、播放音樂,它們雖然屬於次要服務,但與系統息息相關,一般也不會被殺掉;

隱藏進程:oom_adj=7,這個很容易理解,當應用從前台轉入到後台後,也就成為隱藏進程了,通常一鍵清理內存就是清掉這些隱藏進程;

內容提供者:oom_adj=14,沒有程序實體,只提供內容供別的程序去用的,比如日歷供應節點,顯然這類進程最有可能被先殺掉;

空進程:oom_adj=15,有些程序在程序退出後,依然會在進程中駐留一個空進程,這個進程里沒有任何數據在運行,作用往往是提高該程序下次的啟動速度或者記錄程序的一些 歷史 信息,這類進程無疑是要最先被殺掉的。

Android的內存管理機制非常適合嵌入式系統,能充分發揮出硬體的潛力,當內存越大,它的優勢就越明顯。

Android手機需要清內存嗎?不需要

那麼Android手機到底要不要清內存?結論是:不需要!其實這個結論也適用iPhone手機。

手機內存分為兩部分,運行內存和存儲內存。買手機時,一個型號的手機有很多套餐可以選擇,比如6 64GB、4+128GB,前面的4GB,6GB就是運行內存,後者則是存儲內存。

佔用手機運行內存的主要是手機運行程序時被軟體佔用的內存,安卓手機的系統會把手機里說有的軟體都放在後台運行之中,因為這樣開啟軟體的時候會節約等待啟動的時間,除非用戶自己去設置關閉開機自動啟動軟體。

可運行內存一共就那麼多,雖然現在新款手機的運行內存不斷加大但隨著軟體的不斷更新升級,佔用的手機內存也會越來越大,這都是成正比的。為了清理軟體佔用的內存,安卓手機都會配備「一鍵清理」的功能去清理運行內存,這樣可以使因為佔用運行內存過多而變卡頓的手機流暢起來。

而佔用存儲內存的東西就有很多了,比如軟體的數據緩存、微信qq的聊天記錄、相冊里的照片、下載的音樂視頻、簡訊垃圾、手機隨著系統升級,本身系統所佔的內存也會越來越大,這些都會佔用手機的存儲內存。

其中最佔用存儲內存的就當屬照片和微信了。那麼該怎麼看微信到底佔用了多少內存呢?

點開微信中的[我]-[設置]-[通用]-[清理微信存儲空間],等待幾秒鍾後就會顯示佔了多少內存了,如果你不經常清理,那這個數字一定會讓你大吃一驚。然後點擊下方的[管理微信聊天數據]清楚就好了。

一般如果是安卓手機的話,如果手機內存較小,很容易出現內存不夠用的情況。安卓系統、應用廠商的服務、手機應用等都會佔用大量的內存,由於國內手機廠商深度定製的安卓系統,普遍存在全家桶,大量的服務和應用存在自啟和連環喚醒情況,大量消耗用戶內存,造成手機內存佔用過高,嚴重影響了用戶的使用體驗。而反觀國外很多採用原生安卓系統的手機,雖然內存並不大,但內存的佔用率卻極低,實際的應用體驗卻更優秀。所以國內手機廠商的全家桶,是造成手機內存佔用率較高的主要原因。一般可以通過手機助手清理內存,禁止應用自啟,卸載無用應用等方法解決手機內存佔用較多的問題。

國產手機系統全家桶導致手機內存佔用過大

由於目前手機的硬體利潤較低,很多國內手機廠商都是通過預裝應用的方式,提升手機的利潤。所以國產手機普遍存在以全家桶的方式,打包預裝各種應用和服務,通常會在手機中進行自啟,或者連環喚醒,佔用了大量的手機內存,嚴重影響了手機用戶的體驗。

手機內存佔用過高,可以藉助手機衛士清理內存

如果手機的內存佔用過高,可以藉助手機衛士等工具對手機的內存進行清理,對於不常用的手機應用進行卸載,提升手機的運行效率。另外也可以通過禁止手機應用的自啟,來提升手機內存的使用效率,但對於手機存在應用連喚醒的情況,是無效的。所以手機衛士或管家,只能暫時解決手機內存佔用過高的問題,無法從根本上解決問題。

使用第三方原生安卓系統,可大幅降低手機內存佔用

目前的cm等第三方原生安卓系統,一般都不夾帶國產手機廠商的全家桶,系統十分純凈,一般對於手機內存的佔用都比較小。一般如果條件允許的話,可以刷第三方的原生安卓系統,提升手機內存的使用效率。

cm系統是老手機的救星

華為榮耀暢玩4,搭載的驍龍410晶元,僅配置了1g內存,可以說硬體配置十分渣,運行華為自帶emui系統,內存佔用極高,基本卡都沒辦法使用。但刷cm13系統後,竟然滿血復活,運行普通應用十分流暢,完全可以當做備用機使用。這也充分說明,很多國產手機在硬體配置方面沒有太大瓶頸,主要是國產手機系統的全家桶,佔用大量內存,拖慢了整機的速度。

對於手機內存佔用過大的問題,主要是由於安裝和啟動的手機應用較多,特別是很多國產手機的全家桶,佔用和消耗了大量的手機內存,影響了手機的使用效率。一般可以通過手機衛士等工具,清理內存,禁止應用自啟等方法解決手機內存佔用過大的問題。如果想從根本上解決這個問題,更多的還是依靠手機廠商摒棄全家桶,推出類似cm的第三方原生安卓系統。如果條件許可的話,用戶也可以刷cm等比較純凈的第三方安卓系統。

關閉一些沒必要自動運行的軟體,瀏覽器可以選擇無圖模式,音樂播放器可以關閉歌手圖片顯示,視頻播放器要時刻的清理緩存,還有軟體安裝後自動刪除安裝包, 游戲 停止運行後,手動清理全盤緩存,QQ壓縮包,文件管理器中可以找到,格式zip,如果你知道文件夾是哪個軟體所有,覺得清理掉不會影響使用,就清理了,你會發現手機內存又多了至少2GB,不信你就試試吧

智能手機的用戶有一個無法規避的問題,那就是手機的卡頓問題,造成手機卡頓的因素有很多,內存不足便是其中的一種。為了盡量避免手機出現卡頓的這種情況,部分用戶不惜花費重金來購買高內存的手機,但是依然無法完全規避因為內存不足所導致的手機卡頓問題。低內存手機很好理解,為何高內存手機同樣也會出現該問題呢?手機中究竟是怎麼在使用內存,該如何規避因為內存不足而導致手機卡頓的這種問題呢?

關於手機內存您又了解多少呢,我們先單純的從技術面來簡單的聊聊這個問題。手機內存可以分為兩大類,一類是運行內存,一類是存儲內存。前者相當於電腦中的內存,內存空間越大同時支持的運行程序也就越多,較為常見的運行內存有6G、8G、12G等,甚至一些旗艦機型也支持32G的運行內存;後者相當於電腦中的硬碟,內存空間越大意味著能夠存儲更多的內容資源,包括下載的程序、照片、音頻、視頻等,較為常見的存儲內存有64G、128G、256G等,甚至一些旗艦機型也推出了512G以上的存儲內存。

手機廠商標稱的內存大小是否與我們實際使用的空間相同呢?

前不久岳雲鵬也因為在微博上提出了這個問題而上了熱搜!岳雲鵬購買了一款128G的手機,但是實際能夠使用的空間僅為112G,不僅發出了手機內存難道也存在「公攤面積」的疑問。無論是運行內存也好,還是存儲內存也罷,手機廠商採用的進制計算方式與系統不同,導致存在一定的偏差問題(一個採用的是1000進制,一個採用的是1024進制)。除了進制的問題外,手機內存還要被其他內容所佔用,例如運行內存開機之後的系統進程佔用,通常可供用戶使用的運行內存僅為總運行內存的一般,存儲內存需要安裝操作系統,系統的默認軟體等。

排除了這些基本因素外,再來說說智能手機剩餘內存為何會容易占滿的問題。

先來說說運行內存容易占滿的問題(因為運行機制的不同,這里主要討論的是安卓手機,蘋果手機很少會出現此類問題),主要的原因在於智能軟體的自行喚醒功能。智能手機現在所使用的軟體大部分為免費軟體,主要依靠用戶流量所帶來的廣告收益盈利。無論是前台還是後台,軟體運行才是獲得收益的前提,很多軟體或者是同廠軟體在沒有獲得用戶同意的前提下,會悄悄地自動進行喚醒,悄然運行在用戶的運行內存中,勢必會導致用戶運行內存逐漸占滿。工信部為此也擬定了個人用戶信息保護徵求意見稿,未經用戶許可的前提下,APP軟體不得自行喚醒或者更新。

那麼,存儲內存就是是何原因會逐漸占滿呢?

手機硬體的提升勢必會帶來更大的資源佔用,舉一個簡單的例子,現在供用戶手機拍照高清攝像頭成為了發展趨勢,之前一張照片或許僅為4M左右,現在一張照片將在20M以上,對於存儲的需求也越來越高。除此之外,出於個人信息安全的角度考慮,很多APP軟體並不會在伺服器端存儲用戶的個人數據,這一數據存儲在用戶的智能手機存儲內存,例如大家較為常用的微信、QQ等,隨著時間的推移,您會發現此類程序佔用的空間越來越高!

對於運行內存,我們可以通過設置、優化運行程序來降低其佔用率,確保手機不會因此而卡頓。不同品牌的手機都會自帶內存優化工具,以我手上的三星手機為例,可以在智能管理器、內存選項中查看當前的使用狀態,並且可以根據系統的提示進行內存優化。另外在手機設置、程序管理中,大家可以對具體的某款應用程序進行設置,關閉其後台自動喚醒的功能。對於手機操作並不是十分熟悉的用戶,可以下載三方手機優化軟體來自動對運行內存進行優化,不過個人並不建議如此操作,畢竟三方軟體也要耗費手機硬體資源。

對於存儲內存,只能夠是刪除不必要的數據進行優化。合理利用雲存儲是個不錯的方法,無論是手機自帶,還是三方雲存儲都能夠緩解我們存儲內存的壓力(只要能夠連接網路,有需求的數據直接從雲端下載即可)。對於微信、QQ此類占據空間的程序,只能夠通過刪除內容的方式來降低空間,為了方便也可以直接卸載、重新安裝來釋放空間。為了避免關鍵數據出現丟失,卸載之前可以將數據導致電腦端進行存儲,各款軟體基本上都提供了由手機向電腦進行數據遷移的功能。

關於手機內存總是不夠用的問題,是否也發生在您的手機上呢,最終又是如何解決的呢?歡迎大家留言討論,分享經驗。

手機佔用內存最大的就是系統和軟體,系統方面你可以通過刷機來改變大小,可以在手官網(或者其他大神資源)找一個自己機型的精減刷機包, 軟體方面你可以在安智市場裡面下載 歷史 版本,較小的軟體包可以減輕手機內存壓力,另外你還可以root手機,root後可以禁止軟體自啟,阻止軟體相互喚醒,刪除不需要的系統軟體,一星期左右可以關機一次,徹底釋放內存。

【手機總是容易滿內存,到底什麼占內存?】

手機的內存我們在這里一般稱為手機存儲數據的空間。一般它類似於電腦的硬碟,手機的內存基本上能夠給我們帶來的好處是讓我們手機能夠安裝更多的數據,存放更多的文件,不會因為手機內存的不足影響手機的流暢,讓手機卡頓。

我們在使用手機的過程中確實會擔心手機的內存不足,在我們手機內存不足的情況下,我們會建議大家考慮清理一些內存數據,這樣子的能夠讓手機的內存相對比較充足,手機會相對比較流暢。


特別是對於蘋果手機來說,蘋果手機如果內存不足的話,在日常使用過程中確實會出現非常嚴重的卡頓問題,手機在內存嚴重不足的情況下,能夠讓手機整體體驗值相對不高。

那麼,手機的內存到底是哪些那種東西呢?

手機的內存一方面指的是手機系統,手機本身的內置軟體所佔用的空間。也就是手機出產時,它所佔據的一部分的空間。這部分空間是固定的,除非是在系統之後升級,可能會有一定空間的變化,基本上是不會改變的。

手機內存另外一方面是我們在使用手機過程中下載的各種APP以及我們存儲的各種數據照片,視頻圖片等等。同樣還有我們在使用一些APP的時候會出現的一些緩存數據,特別像微信,它的緩存數據占據空間相對較大。


所以,我們在日常使用手機過程中,一定要注意清除手機APP中的一些緩存,這樣能保證手機的內存數據得到更好的使用,不會因為手機內存數據的不足影響手機的流暢。

手機內存分為運行內存(RAM,簡稱運存)和存儲內存(ROMZ)兩種。運行內存比較少,手機一般4G和6G居多。存儲內存較大,一般16G—512G,其中64G和128G居多。比如一款手機為「6+64G」的內存,就代表著6G的運行內存和64G的存儲內存。

運行內存是為手機運行的程序服務的,換句話說,就是儲存運行中的程序的這部分內存。手機不像電腦,當你退出一個程序後,這個程序不會直接關閉,而是在後台繼續運行。就比如當你在下載一部電影的時候,你返回桌面或者打開其他軟體,這部電影還在繼續下載。

只有2G運存的安卓機相信不少人都用過,只要後台運行的程序一多,分分鍾給你卡到原地爆炸。而反觀只有1G運存的蘋果卻從來不會出現這種情況,這是因為兩者的系統運行機制不同。蘋果的ios系統對於後台運行的軟體有很好的優化,系統只會分少量的資源給後台運行的應用。這樣即保證了後台應用的運行,也不會耽誤新程序的載入速度。而安卓系統就不同了,對於後台運行的程序沒有限制,所以後台一多,馬上變卡。

不過現在的安卓系統新增了一個叫Low Memory Killer(LMK)的後台程序管理機制。每當運行內存不足時,LMK都會自動關閉最不重要的後台程序來為新程序騰出運行內存和系統空間。所以現在的安卓機只要你不是開太多程序,4—6G的運行內存不會被占滿。

存儲內存相信大家更熟悉了,就是用來儲存數據的內存。手機中每個文件、軟體、圖片、視頻都需要佔用存儲內存。而且,隨著手機的使用,系統中的垃圾文件會越來越多,更新的軟體越來越大,導致內存不夠用。在這個一個QQ、微信動輒幾個G的時代,32G的手機內存是不夠用了。筆者建議大家最好買64G以上的手機,並且定期恢復出廠設置。

設置一下後台最多隻同時打開三個或四個應用軟體,其實安卓沒有必要那麼在乎還剩下多少內存,你會發現六個g和四個g內存佔用率都是差不多的。都剩下不了多少內存。系統會根據使用習慣把常用軟體從rom調入ram中供用戶隨時快速打來。

Ⅲ LowMemoryKiller機制分析

linux系統當可用內存較低的時候oom killer機制會根據一定的規則去殺掉一些進程來釋放內存,而Android系統的LowMemoryKiller機制就是以此功能為基礎做了一些調整。Android系統中的APP在使用完成之後並不會馬上被殺掉,而是駐留在內存中,當下一次在此進入此應用的時候可以省去進程創建的過程,加快啟動速度。LowMemoryKiller機制會在內存資源緊張的時候,殺掉一些進程來回收內存。

LowMemoryKiller機制分為三個部分

Framework中的ProcessList和Native的lmkd進程通過Socket進行進程間通信,而lmkd和內核中的LowMemoryKiller通過writeFileString向文件節點寫內容方法進行通信。

Framework層通過一定的規則調整進程的adj的值和內存空間閥值,然後通過socket發送給lmkd進程,lmkd兩種處理方式, 一種將閥值寫入文件節點發送給內核的LowMemoryKiller,由內核進行殺進程處理,另一種是lmkd通過cgroup監控內存使用情況,自行計算殺掉進程。

lmkd是一個native進程,由init進程啟動,定義在/system/core/lmkd/lmkd.rc中

在lmkd.rc中,啟動了lmkd進程,並創建了一個名為lmkd的socket的描述符,用於socket進程間通信。lmkd啟動後首先執行main方法。

main方法首先設置了當前進程的調度規則,然後執行了init方法和mainLoop方法。

lmkd的init方法中做的工作

我們先分析內核實現的LowMemoryKiller進程查殺機制, 然後再分析lmkd實現的機制。兩者最終的結果都是在內存緊張的時候殺死一些進程來釋放內存, 但是實現機制去不太一樣。

init執行初始化完成之後, 進入mainloop方法,循環等待epoll事件的上報,init的時候epoll監聽的socket連接, 當有socket連接的時候就會調用ctrl_connect_handler方法。

監聽到socket連接, 我們知道此時連接lmkd的socket客戶端就是framework,當有連接到來的時候accept方法返回連接的socketFD, 然後將連接的socketFD同樣加入epoll中, 當socketFD中有可讀消息,即framework給lmkd發送消息的時候,epoll喚醒然後會掉ctrl_data_handler方法來處理。

Framework和lmkd進程通過socket來進行進程間通信,在lmkd初始化的時候,通過監聽socket描述符lmkd來等待Framework發送的消息。
Framework向lmkd發送命令相關的方法有三個。

上面的三種情況Framework最終是通過socket向lmkd發送了三種消息。

lmkd接收命令處理邏輯

lmkd通過epoll監聽socket中是否有數據, 當接受的framework發送的socket命令之後,調用ctrl_cmmand_handler方法處理,顯示解析socket中的命令和參數,根據對於的命令來調用不同的方法處理。

對於進程查殺有兩種實現方式,一種是內核的LMK,通過shrinker來觸發低內存回收, 另一種是lmkd通過cgroup監控內存使用情況,自行計算殺掉進程。兩種實現不太一樣,需要逐個分析。

設置內存閥值和adj的值就是將從framework收到的數據封裝成字元串,通過writefilestring寫入到兩個文件節點,以供內核LMK使用。
/sys/mole/lowmemorykiller/parameters/minfree : 內存級別限額
/sys/mole/lowmemorykiller/parameters/adj :內存級別限額對應的要殺掉的進程的adj值.

由於使用內核LMK, 所以調整進程優先順序直接將優先順序寫入對應進程的oom_adj_score文件即可。

移除進程的時候不需要做任何操作

在linux中,有一個名為kswapd的內核線程,當linux回收存放分頁的時候,kswapd線程將會遍歷一張shrinker鏈表,並執行回調,或者某個app啟動,發現可用內存不足時,則內核會阻塞請求分配內存的進程分配內存的過程,並在該進程中去執行lowmemorykiller來釋放內存。雖然之前沒有接觸過,大體的理解就是向系統注冊了這個shrinker回調函數之後,當系統空閑內存頁面不足時會調用這個回調函數。 struct shrinker的定義在linux/kernel/include/linux/shrinker.h中:
內核LowMemoryKiller shrinker的注冊過程如下:

注冊完成之後, 在內存緊張的時候就會回調shrinker, 其中最主要的是lowmem_scan方法。具體實現如下:

內核LMK的原理很簡單:首先注冊了shrinker,在內存緊張的時候會觸發lowmem_scan方法,這個方法要做的就是找打一個進程,然後殺掉他,釋放一些內存。

內核LMK的實現邏輯已經分析完了

lmkd實現內存查實的方式是基於 cgroup memory 來實現的。
什麼是cgroup memory?
Cgroup的memory子系統,即memory cgroup(本文以下簡稱memcg),提供了對系統中一組進程的內存行為的管理,從而對整個系統中對內存有不用需求的進程或應用程序區分管理,實現更有效的資源利用和隔離。

cgroup memory相關的文件

簡單的了解了下cgroup的原理,再來看lmkd的init方法

先了解下memory pressure_level的用法

init_mp_common方法嚴格的按照pressure_level的用法,注冊了pressure_level的事件回調, pressure_level分為三個等級

當內存達到相應的等級,就會回調mp_event_common方法, 由mp_event_common方法來處理。

lmkd內存查殺原理:

進程查殺的兩種實現方式原理類似,都是注冊是的回調,當內存緊張的時候根據剩餘內存的adj來查殺大於該adj的內存。內核shrinker方式是只有內存緊張的時候才會去釋放,而cgroup方式控制更加精細, 根據不同等級來觸發內存回收。

閱讀全文

與lmkandroid相關的資料

熱點內容
k9哪裡查看刪除的app 瀏覽:840
如何去找免單app 瀏覽:132
安卓機用久了卡了怎麼清理垃圾 瀏覽:904
點點加密譯 瀏覽:765
電信dns伺服器怎麼更改 瀏覽:710
命令與征服3玩不了 瀏覽:674
ubuntu命令行安裝deb 瀏覽:65
物理文件夾與當前文件名相同 瀏覽:73
java介面協議 瀏覽:441
阿里巴巴要演算法工程師嗎 瀏覽:915
go二進制反編譯 瀏覽:975
如何在xml中修改APP字體 瀏覽:998
編譯程序就是把什麼翻譯成什麼 瀏覽:944
轉賬加密一般幾天到賬 瀏覽:706
c編譯怎麼打成中文 瀏覽:627
163郵箱如何綁定域名郵箱伺服器 瀏覽:228
北郵數據結構與演算法 瀏覽:293
什麼叫反編譯呢 瀏覽:132
au和什麼編譯軟體一起用 瀏覽:751
android登錄背景 瀏覽:592