當前位置:首頁 » 安卓系統 » android內存處理

android內存處理

發布時間: 2023-05-19 07:58:51

❶ 如何清理安卓手機內存

1、在手機上找到“文件管理”,點擊進入,在下方就會有一個“文件清理”,點擊即可。(清理一些系統文件、空文件等)。

2、在手機上找到“設置”,“設置”--->"應用程序"--->"高德地圖"(以高德地圖為例,其他程序一樣的操作)--->"清理數據"(清理數據會清理完所有數據,比如:登陸的密碼賬號等)。(清理應用程序)。

3、前面操作一樣,只是不是清理數據而是將程序所在的環境變一下。一般情況下會有兩種狀況:一種是“移至系統空間”;另一種是“移至SD卡空間”。當下載完程序後,一般安裝到SD卡,空間比較大,只需點擊“移至SD卡空間”就可以了(我這里因為已經是存在SD卡上,所以出現的是“移至系統空間”)。

4、打開微信(很多程序,當空間不足的.時候,它會提醒,比如微信、支付寶等,就以微信為例),找到“設置”,“設置”--->“通用”--->“清理微信存儲空間”,就可以清理了(單純的清理該程序的內存)。

5、還可以下軟體,比如網路助手、手機管家等。一般情況下,打開管理軟體就可以看見清除內存了。

特別提示

1、刪除某些文件時,不要講重要的也刪除了。

2、手機應當隨時清理內存,因為沒下個東西或者網格游戲,都會帶有很多垃圾。


❷ 安卓手機內存不足的解決方法

1、將系統的apk程序的緩存文件都清理掉,進入手機的設置選項,選擇“設置”—“應用程序”—“管理應用程序”,點擊MENU鍵,選擇“按大小排序”(安卓2.2系統要先選擇好已下載標簽),這樣系統安裝的應用程序就按程序大小排列起來了,然後選擇其中一款程序,點擊“清除緩存”即可。注意,像Google Maps、Market、瀏覽器和相冊等應用程序的緩存文件可能積累到好幾兆,因此保持清理系統程序的緩存文件是相當必要的。

2、HTC手機如果不打算使用Sense UI界面了,請清理掉HTC Sense的.數據文件,這樣得到的系統內存空間還是可觀的。

3、建議卸載掉那些你很少使用的應用程序,這樣也有利於很多安卓手機內存空間清理。

安卓手機內存卡清理教程

4、當然你還可以下載一些自動清除緩存文件的軟體,這些軟體在一定程度幫助緩解安卓手機內存不足的問題。

5、將所有可以移動的應用程序移動到手機的SD卡上,現在安卓2.2以上的系統都可以支持安裝應用程序到SD卡的,當然前提你已經擁有ROOT許可權了。

6、打開RE管理器,找到/data/local/目錄,裡面有rights和tmp兩個文件夾,沒有rights文件夾也沒關系,打開tmp文件夾,這裡面都是大家之前安裝失敗的軟體,然後清空就可以了。

❸ Android內存抖動——檢測、常見場景、處理

介紹:內存抖動是Android性能優化中內存優化的一種情況,主要是由於頻繁的對象創建導森耐致內存抖動,最終可能導致卡頓和OOM。

demo:點擊一次button,將會創建100000個對象,不斷創建、GC回收(因為字元串拼接要創建StringBuilder對象)

利用Android Profiler進行檢測:

Record截取一段時間進行分析:

可以看到創建了大量的StringBuilder對象,帶升也就是在大循環中頻繁蠢春老創建對象,GC回收頻繁,導致內存抖動。

總結:內存抖動可採用Android Profiler進行檢測,可截取某段時間進行對象分析,查看哪些對象被頻繁創建。

大循環中創建對象、自定義View的onDraw()方法中創建對象(屏幕繪制與動畫執行時會頻繁調用onDraw())。

將對象創建放到循環外,對於無法避免的創建對象情況,可採用對象池模型進行緩存,復用對象,需注意用完後要手動釋放對象池中對象。

❹ 安卓手機內存空間不足的解決辦法

1. 系統提示內存空間不足了之後,卸載程序也不會增加多少可用空間,仍然會提示系統內存不足,親測通過格式化手機可以解決,也就是恢復出廠設置(恢復出廠設置會把所有應用都卸載回到最初界面)。當然這個方法也會讓你安裝的APP都丟失,如果沒必要刷機就再看看下面的辦法吧。

2. 打開RE文件瀏覽器,將/data/dalvik-cache 這個文件夾裡面的都是系統緩存文件和卸載定製程序留下來的無用垃圾,可以放心全部刪除,系統所需文件重啟後能自動生成的,刪除後可以感覺到系統內存明顯提升,RAM內存釋放,重啟期間等待時間一到兩分鍾,期間不要有任何操作。我實測有效,不過發現鎖屏變成默認的。

3. 打開re管理器,找到/data/local/目錄,你會看到rights和tmp這兩個文件夾(有的可能沒有rights這個文件夾,不過沒關系),進入tmp文件夾, 你會發現以前安裝失敗或是安裝途中重啟後失敗的軟體都可以在這里找到,然後當然就是刪掉它們啦,刪完後看看你的手機內存,是不是多了很多了?有興趣的朋友不妨去嘗試下喔!

4. 移動APP到SD卡,這個方法有一定的`局限性,但效果不錯,不過部分手機不支持這樣的功能。

5. 使用容量較小的主題包,一個比較美觀的主題包差不多得有十幾M,而默認的主題只有2M多,由於使用的主題都是要求放置在機身內存中的,所以使用小容量的主題包也能很有效的減少內存佔用。其他的主題也是一樣。

❺ Android系統內存管理

部分內容出至林學森的Android內核設計思想。
Android官網內存管理
部分出至 https://www.jianshu.com/p/94d1cd553c44

Android本質是Linux所以先從Linux說起。

Linux的內存管理為系統中所有的task提供可靠的內存分配、釋放和保護機制。
核心:
虛擬內存
內存分配與釋放
內存保護

將外存儲器的部分空間作為內存的擴展,如從硬碟劃出4GB大小。
當內存資源不足時,系統按照一定演算法自動條形優先順序低的數據塊,並把他們存儲到硬碟中。
後續如果需要用到硬碟中的這些數據塊,系統將產生「缺頁」指令,然後把他們交換回內存中。
這些都是由操作系統內核自動完成的,對上層應用」完全透明「。

每個進程的邏輯地址和物理地址都不是直接對應的,任何進程都沒辦法訪問到它管轄范圍外的內存空間——即刻意產生的內存越界與非法訪問,操作系統也會馬上阻止並強行關閉程序,從而有力的保障應用程序和操作系統的安全和穩定。

一旦發現系統的可用內存達到臨界值,機會按照優先順序順序,匆匆低到高逐步殺掉進程,回收內存。
存儲位置:/proc/<PID>/oom_score
優先順序策略:
進程消耗的內存
進程佔用的CPU時間
oom_adj(OOM權重)

Android平台運行的前提是可用內存是浪費的內存。它試圖在任何時候使用所有可用的內存。例如,系統會在APP關閉後將其保存在內存中,以便用戶可以快速切換回它們。出於這個原因,Android設備通常運行時只有很少的空閑內存。在重要系統進程和許多用戶應用程序之間正確分配內存內對存管理是至關重要。
Android有兩種主要的機制來處理低內存的情況:內核交換守護進程(kernel swap daemon)和低內存殺手(low-memory killer)。

當用戶在APP之間切換時,Android會在最近使用的(LRU)緩存中保留不在前台的APP,即用戶看不到的APP,或運行類似音樂播放的前台服務。如果用戶稍後返回APP,系統將重用該進程,從而使APP切換更快。
如果你的APP有一個緩存進程,並且它保留了當前不需要的內存,那麼即使用戶不使用它,你的APP也會影響系統的整體性能。由於系統內存不足,它會從最近使用最少的進程開始殺死LRU緩存中的進程。該系統還負責處理佔用最多內存的進程,並可以終止這些進程以釋放RAM。
當系統開始終止LRU緩存中的進程時,它主要是自底向上工作的。系統還考慮哪些進程消耗更多的內存,從而在終止時為系統提供更多的內存增益。你在LRU列表中消耗的內存越少,你就越有可能留在列表中並能夠快速恢復。

為了滿足RAM的所有需求,Android嘗試共享RAM來跨進程通信。它可以做到以下方式:

Android設備包含三種不同類型的內存:RAM、zRAM和storage。
注意:CPU和GPU都訪問同一個RAM。

內存被拆分成頁。通常每頁有4KB的內存。
頁面被認為是空閑的或已使用的。
空閑頁是未使用的RAM。
已使用頁是系統正在積極使用的RAM,分為以下類別:

干凈的頁面(Clean pages)包含一個文件(或文件的一部分)的一份精確副本存在存儲器上。當一個干凈的頁面不再包含一個精確的文件副本(例如,來自應用程序操作的結果)時,它就變成了臟頁。可以刪除干凈的頁,因為它們始終可以使用存儲中的數據重新生成;不能刪除臟頁(Dirty pages),否則數據將丟失。

內核跟蹤系統中的所有內存頁。

當確定一個應用程序正在使用多少內存時,系統必須考慮shared pages。APP訪問相同的服務或庫將可能共享內存頁。例如,Google Play Services 和一個游戲APP可能共享一個位置服務。這使得很難確定有多少內存屬於這個服務相對於每個APP。

當操作系統想要知道所有進程使用了多少內存時,PSS非常有用,因為頁面不會被多次計數。PSS需要很長時間來計算,因為系統需要確定哪些頁面是共享的,以及被有多少進程。RSS不區分共享頁面和非共享頁面(使計算速度更快),更適合於跟蹤內存分配的更改。

內核交換守護進程(kswapd)是Linux內核的一部分,它將使用過的內存轉換為空閑內存。當設備上的空閑內存不足時,守護進程將變為活動狀態。Linux內核保持低和高的可用內存閾值。當空閑內存低於低閾值時,kswapd開始回收內存。當空閑內存達到高閾值,kswapd將停止回收內存。
kswapd可以通過刪除干凈的頁面來回收干凈的頁面,因為它們有存儲器支持並且沒有被修改。如果進程試圖定址已刪除的干凈頁,則系統會將該頁從存儲器復制到RAM。此操作稱為請求分頁。

kswapd將緩存的私有臟頁(private dirty pages)和匿名臟頁(anonymous dirty pages)移動到zRAM進行壓縮。這樣做可以釋放RAM中的可用內存(空閑頁)。如果進程試圖觸摸zRAM中臟頁,則該頁將被解壓縮並移回RAM。如果與壓縮頁關聯的進程被終止,則該頁將從zRAM中刪除。
如果可用內存量低於某個閾值,系統將開始終止進程。

lmkd實現源碼要在system/core/lmkd/lmkd.c。
lmkd會創建名為lmkd的socket,節點位於/dev/socket/lmkd,該socket用於跟上層framework交互。

小結:
LMK_TARGET: AMS.updateConfiguration() 的過程中調用 updateOomLevels() 方法, 分別向/sys/mole/lowmemorykiller/parameters目錄下的minfree和adj節點寫入相應信息;
LMK_PROCPRIO: AMS.applyOomAdjLocked() 的過程中調用 setOomAdj() 向/proc/<pid>/oom_score_adj寫入oom_score_adj後直接返回;
LMK_PROCREMOVE: AMS.handleAppDiedLocked 或者 AMS.() 的過程,調用remove(),目前不做任何事,直接返回;

為了進一步幫助平衡系統內存並避免終止APP進程,可以Activity類中實現ComponentCallbacks2介面。提供的onTrimMemory()回調方法允許APP在前台或後台偵聽與內存相關的事件,然後釋放對象以響應應用程序生命周期或表明系統需要回收內存的系統事件。
onTrimMemory()回調是在Android 4.0(API級別14)中添加的。
對於早期版本,可以使用onLowMemory(),它大致相當於TRIM_MEMORY_COMPLETE事件。

一個專門的驅動。(Linux Kernel 4.12 已移除交給kswapd處理)。
很多時候,kswapd無法為系統釋放足夠的內存。在這種情況下,系統使用onTrimMemory()通知APP內存不足,應該減少其分配。如果這還不夠,內核將開始終止進程以釋放內存,它使用低內存殺手(LMK)來完成這個任務。
為了決定要終止哪個進程,LMK使用一個名為oom_adj_score的「out of memory」分數來確定運行進程的優先順序,高分的進程首先被終止。
後台應用程序首先被終止,系統進程最後被終止。
下表列出了從高到低的LMK評分類別。第一排得分最高的項目將首先被殺死:

Android Runtime(ART)和Dalvik虛擬機使用分頁(Paging)和內存映射(mmapping)來管理內存。應用程序通過分配新對象或觸摸已映射頁面來修改內存都將保留在RAM中,並且不能被調出。應用程序釋放內存的唯一方式是垃圾收集器。

❻ 如何給Android手機清理內存空間!

Android清理內存空間 Android手機也像其他智能手機一樣都採用了處理器、ROM和RAM的硬體配置架構,因此他也不例外的有著其他智能手機都有的缺陷,那就是內存空間不夠用。那HTC Dream舉例,其內置的內存為192MB,除去系統自帶的系統僅剩下70MB左右罩嫌,安裝了數款軟體後再查看系統剩餘內存,剩下40MB就算多的卜悶禪了,一般都只剩下20-30MB,這樣會導致系統運行速度變慢,甚至是滑動操作都不能正常顯示。那麼該如何解決這一問題呢?解決問題就要從根本上看清問題,上型塵述的情況已經可以確定這個問題在於系統剩餘的內存空間上,因此以這里出發時沒錯的。其實人性化十足的Android操作系統已經內置了系統清理的組件。可以將某些組件的臨時文件清除。

❼ Android App內存優化

內存優化就是對內存問題的一個預防和解決,做內存優化能讓應用掛得少、活得好和活得久。

掛的少:
「掛」指的是 Crash,內存問題導致 Crash 的具體表現就是內存溢出異常 OOM。

活得好:
活得好指的是使用流暢,Android 中造成界面卡頓的原因有很多種,其中一種就是由內存問題引起的。內存問題之所以會影響到界面流暢度,是因為垃圾回收(GC,Garbage Collection),在 GC 時,所有線程都要停止,包括主線程,當 GC 和繪制界面的操作同時觸發時,繪制的執行就會被擱置,導致掉幀,也就是界面卡頓。

活得久:
活得久指的是我們的應用在後台運行時不會被幹掉。Android 會按照特定的機制清理進程,清理進程時優先會考慮清理後台進程。清理進程的機制就是LowMemoryKiller。在 Android 中不同的進程有著不同的優先順序,當兩個進程的優先順序相同時,低殺會優先考慮幹掉消耗內存更多的進程。也就是如果我們應用佔用的內存比其他應用少,並且處於後台時,我們的應用能在後台活下來,這也是內存優化為我們應用帶來競爭力的一個直接體現。

內存佔用是否越少越好?
當系統 內存充足 的時候,我們可以多用 一些獲得更好的性能。當系統 內存不足 的時候,我們希望可以做到 」用時分配,及時釋放「。內存優化並不能一刀切。

我們都知道,應用程序的內存分配和垃圾回收都是由Android虛擬機完成的,在Android 5.0以下,使用的是Dalvik虛擬機,5.0及以上,則使用的是ART虛擬機。
Android虛擬機Dalvik和ART

1、內存區域劃分

詳細請看以下兩篇文章(建議全看):
java內存四大區_JVM內存區域劃分
Android 內存機制

2、內存回收

垃圾收集的標記演算法(找到垃圾):

垃圾收集演算法(回收垃圾):

引用類型:強引用、軟引用、弱引用、虛引用

對象的有效性=可達性+引用類型

JAVA垃圾回收機制-史上最容易理解看這一篇就夠了
Android:玩轉垃圾回收機制與分代回收策略

android中還存在低殺機制,這種情況屬於系統整機內存不足,直接把應用進程殺掉的情況。

Android後台殺死系列:LowMemoryKiller原理

1、內存溢出
系統會給每個App分配內存空間也就是heap size值,當app佔用的內存加上申請的內存超過這個系統分配的內存限額,最終導致OOM(OutOfMemory)使程序崩潰。

通過命令 getprop |grep dalvik.vm.heapsize 可以獲取系統允許的最大
注意:在設置了heapgrowthlimit的狀況下,單個進程可用最大內存為heapgrowthlimit值。在android開發中,若是要使用大堆,須要在manifest中指定android:largeHeap為true,這樣dvm heap最大可達heapsize。
關於heapsize & heapgrowthlimit

2、內存泄漏
Android系統虛擬機的垃圾回收是通過虛擬機GC機制來實現的。GC會選擇一些還存活的對象作為內存遍歷的根節點GC Roots,通過對GC Roots的可達性來判斷是否需要回收。內存泄漏就是 在當前應用周期內不再使用的對象被GC Roots引用,造成該對象無法被系統回收,以致該對象在堆中所佔用的內存單元無法被釋放而造成內存空間浪費,使實際可使用內存變小。簡言之,就是 對象被持有導致無法釋放或不能按照對象正常的生命周期進行釋放。
Android常見內存泄漏匯總

3、內存抖動
指的是在短時間內大量的新對象被實例化,運行時可能無法承載這樣的內存分配,在這種情況下就會導致垃圾回收事件被大量調用,影響到應用程序的UI和整體性能,最終可能導致卡頓和OOM。
常見情況:在一些被頻繁調用的方法內不斷地創建對象。例如在View 的onDraw方法內new 一些新的對象。

注意內存抖動也會導致 OOM,主要原因有如下兩點:

1、Android Studio Profiler

作用

優點

內存抖動問題處理實戰

理解內存抖動的概念的話,我們就能明白只要能找到抖動過程中所產生的對象及其調用棧,我們就能解決問題,剛好Android Studio 的Porfiler裡面的Memory工具就能幫我們記錄下我們操作過程中或靜止界面所產生的新對象,並且能清晰看到這些對象的調用棧。

選擇Profile 中 的Memory ,選擇 Record Java/Kotlin allocations,再點擊Record開始記錄, Record Java/Kotlin allocations 選項會記錄下新增的對象。

操作完成之後,點擊如圖所示的紅腦按鈕,停止記錄。

停止記錄後,我們就可以排序(點擊 Allocations可以排序)看看哪些對象或基本類型在短時間被頻繁創建多個,點擊這些新增的對象就可以看到它的完成的調用鏈了,進而就找找到導致內存抖動的地方在哪裡了。

2、利用DDMS 和 MAT(Memory Analyzer tool)來分析內存泄漏

我們利用工具進行內存泄漏分析主要是用對比法:
a.先打開正常界面,不做任何操作,先抓取一開始的堆文件。
b.一頓胡亂操作,回到原來操作前的界面。主動觸發一兩次GC,過10秒再抓取第二次堆文件。
c.通過工具對比,獲取胡亂操作後新增的對象,然後分析這些新增的對象。

DDMS作用:抓取堆文件,主動觸發GC。(其實也是可以用Android Studio 的Profile裡面的Memory工具來抓取堆文件的,但是我這邊在利用Profile 主動觸發gc 的時候會導致程序奔潰,也不知道是不是手機的問題,所以沒用Android Studio的Profiler)

MAT作用:對堆文件進行對比,找到多出的對象,找到對象的強引用調用鏈。

以下是詳細的過程:

步驟1.打開DDMS,選擇需要調試的應用,打開初始界面,點擊下圖的圖標(Dump Hprof File)先獲取一次堆文件。

步驟2.對應用隨便操作後,回到一開始的界面,先多觸發幾次GC ,點擊下圖的圖標(Cause Gc)來主動觸發GC,然後再次點擊 Dump Hprof File 圖標來獲取堆文件。

步驟3.通過Android Studio Profile 或者 DDMS mp 的堆文件無法在MAT 打開,需要藉助android sdk包下的一個工具hprof-conv.exe來轉換。

格式為 hprof-conv 舊文件路徑名 要轉換的名稱;
例如:hprof-conv 2022-04-13_17-54-40_827.hprof change.hprof

步驟4.把兩份堆文件導入MAT,然後選擇其中第二次獲取的堆文件,點擊 如圖所示的 Histogram查看。

步驟5.點擊下圖圖標,Compare To Another Heap Dump ,選擇另一份堆文件。

6.會得出下圖所示的 Hitogram 展示,我們主要看Objects 這一列。 如下圖所示 「+ 2」 則代表前面兩份堆文件對比,這個對象多了兩個,我們主要就是要分析這些多了出來,沒有被回收的對象。

7.加入我們從增加的對象中,看到了MainActivity ,則需要從一開始打開的Hitogram 展示裡面找到這個對象的調用棧。如下圖所示,搜索MainActivity

8.看到下圖所示解僱,然後滑鼠右鍵點擊下圖紅色圈圈著的MainActivity ,選擇 Merger Shortest Paths to Gc Roots ,再選擇 exclude all phantom/weak/soft etc.references ,就可以看到這個MainActivity 對象的強引用鏈,至此我們就可以找到MainActivity對象是被什麼引用導致無法回收了。

3、內存泄露檢測神器之LeakCanary(線下集成)

自行學習了解,接入簡單,使用簡單,基本可以解決大部分內存泄漏問題。
github地址 : https://github.com/square/leakcanary/
學習地址 : https://square.github.io/leakcanary/changelog/#version-22-2020-02-05

針對內存抖動的建議:

針對內存泄漏問題的建議:

針對內存溢出問題的建議(主要就是要減少內存佔用):

建議參考:
深入探索 Android 內存優化(煉獄級別)

對於 優化的大方向,我們應該優先去做見效快的地方,主要有以下三部分:內存泄漏、內存抖動、Bitmap。完善監控機制也是我們的重點,能幫助我們對內存問題快速分析和處理。

參考:
深入探索 Android 內存優化(煉獄級別)

❽ 安卓手機內存變小怎麼處理

手機系統內存是指手機運行程序時使用的內存(即運行內存),只能臨時存儲數據,用於與CPU交換高速緩存數據,但是隨機存儲器(RAM)本身不能用於長期存儲數據。下面是我收集整理的安卓手機內存變小怎麼辦,歡迎閱讀。

1.打開re管理器,找到/data/dalvik-cache,將/data/dalvik-cache移動到/cache/data/,(或者你也可以直接把目錄dalvik-cache直接刪除掉)→然後就是重新啟動手機,重啟之後,你可以發現手機的可用內存明顯回來了許多。

安卓手機內存變小怎麼辦 解決方法都有哪些

2.打開re管理器,找到/data/local/目錄,你會看到rights和tmp這兩個文件夾(有的可能沒有rights這個文件夾,不過沒關系),進入tmp文件夾, 你會發現以前安裝失敗或是安裝途中重啟後失敗的軟體都可以在這里找到,然後當然就是刪掉掉它們啦,然後看看你的手機內存,是不是多了很多了,有興趣的朋友不妨去嘗試下喔!

此方法對裝40個以上軟體的TX有明顯效果,AD的軟體更新比較快,而且官方的'軟體也更新較快,每次更新後您是不是發現您的內存又小了5-10M?是不是很蛋疼?蛋疼就請看下去。ROOT手機(現在ROOT很方便且無痛居家必備啊)打開RE管理器,掛載可讀寫。定位到DATA文件夾,找到dalvik-cache文件夾,果斷刪除,機器會提示XX進程強制關閉,不要理它,果斷立即馬上重啟手機。這個過程可能要3-5分鍾(軟體少就快一點,軟體多就慢一點),重啟後DALVIK-CACHE文件夾依然會重建出來,但是你的內存明顯增加了。此方法理論支持所有的AD系統,而且沒發現副作用。

另外還有一點小技巧:

系統自帶的地圖,市場,FLASH,等軟體也經常更新,你會發現SYSTEMAPP下都有這些APK, DATAAPP下也有這些APK,SYSTEM下的是老版本,DATA下的是你更新的版本,但是兩個地方的APK名稱不一樣圖標都是一樣的,如果你感覺內存小,你可以把DATAAPP下APK名字改成和SYSTEMAPP下的APK的名字,然後把改名後的APK從DATAAPP剪切到SYSTEMAPP覆蓋以前的老版本,重啟JJ,你會發現程序沒有丟失而且可以正常使用,而且內存又增加了,記得要重啟。

❾ 怎麼管理Android手機的剩餘內存教程

使用android手機的用戶可能都安裝了任務管理的軟體,使用android手機真的有必要安裝結束任務的軟體嗎?大家在使用中也都發現了,很多軟體在被結束後,馬上就會又出現在任務列表裡,或是稍等一會自己也會出現,任務管理不停的結束後台程序,也沒見給手機的運行速度帶來多少提升,這是為什麼呢?

其實大家不用那麼在意android手機剩餘內存的大小。很多人都是把使用其他系統的習慣帶到了android手機上,不是所有的智能手機系統都一樣的。android大多數應用沒有退出的設計其實是有道理的,這和系統對進程的調度機制有關系。如果你知道java,就能更清楚這機制了。其實和java的垃圾回收機制類似,系統有一個規則來回收內存。進行內存調度有個閥值,只有低於這個值系統才會按一個列表來關閉用戶不需要的東西。當然這個值默認設置得很小,所以你會看到內存老在很少的數值徘徊。但事實上他並不影響速度。相反加快了下次啟動應用的速度。這本來也是android的優勢之一,如果人為去關閉進程,沒有太大必要。特別是自動關進程的軟體。

兆滲可能有人會說了,那為什麼內存少的時候運行大型程序會慢呢?其實很簡單,在內存剩餘不多時打開大型程序,會觸發系統自身的調進程調度策略,這是十分消耗系統資源的操作,特別是在一個程序頻繁向系統申請內存的時候。這種情況下系統並不會關閉所有打開的進程,而是選擇性關閉,頻繁的調度自然會拖慢系統。

那麼,進程管理軟帆臘件到底還有存在的價值嗎?其實還是有的,族轎脊在運行大型程序之前,你可以手動關閉一些進程釋放內存,可以顯著的提高運行速度。但一些小程序,完全可交由系統自己管理。很多朋友還有個疑問,如果不關程序是不是會更耗電?這里也解釋一下,android的應用在被切換到後台時,它其實已經被暫停了,並不會消耗cpu資源,只保留了運行狀態。所以為什麼有的程序切出去重新進入,還會到主界面。但是,一個程序如果想要在後台處理些東西,如音樂播放,它就會開啟一個服務,服務可在後台持續運行,所以在後台耗電的也只有帶服務的應用了。這個在進程管理軟體里能看到,名字是service。所以沒有帶服務的應用在後台是完全不耗電的,沒有必要關閉。這種設計本來就是一個非常好的設計,下次啟動程序時,會更快,因為不需要讀取界面資源,何必要關掉他們抹殺這個android的優點呢?

還有一點,為什麼android應用看起來那麼耗內存?大家知道,android上的應用是java,當然需要虛擬機,而android上的應用是帶有獨立虛擬機的,也就是每開一個應用就會打開一個獨立的虛擬機。這樣設計的原因是可以避免虛擬機崩潰導致整個系統崩潰,但代價就是需要更多內存。

至於為什麼開了大程序或者開了好幾個程序之後切換會變慢,具體分析如下:

已經開啟了一個大程序,佔用70%內存,如果再想運行一個程序,此時還需要50%的內存,則就需要一個從大程序佔用的內存中釋放或者壓縮的過程,所以表現出來的就是慢一會兒。

已經開啟了幾個程序共佔用內存80%,運行新程序時又需要20%的內存,系統內存因為沒見過剩餘0的時候,也就是應該剩一部分空閑內存,那麼就需要從之前開啟的這幾個程序中選擇一個或者幾個來關閉,這一過程也需要耗費系統資源,所以會慢一會兒。也就是說你手動去結束程序的時候,就是替系統在釋放內存,就算你不去結束,在需要內存的時候系統也會自動結束程序釋放內存。

不在後台運行的程序(沒服務的),即使不結束也不會耗電。在後台運行的.(有服務的)程序,如一些播放器或實時監控的軟體,自然會耗電。這就說明結束進程並不是沒用,我們只需要看哪個帶服務耗電哪個程序後台一直在運行,看服務就能看出來,這樣的軟體如果用不到的時候就結束了吧。

以QQ舉例,正常的退出,會在進程管理里留下qq的運行過的狀態,但不耗電不佔 cpu,如果你只是切換出去(按房子鍵而不是退出)那麼自然會耗電,因為程序還在運行,QQ還在線呢。

這里就有個要注意的地方了,雖然房子鍵和那個返回鍵都可以將程序切換出去,但是兩者的效果差異是很大的,返回鍵可以視作程序已經退出了,而按房子鍵,則是將程序切換到了後台來運行,軟體並沒有退出哦!

以上這些設計都是為了確保了android的穩定性,正常情況下最多單個程序崩潰,但整個系統不會崩潰,也永遠沒有內存不足的提示出現。大家可能是被windows毒害得太深了,總想保留更多的內存,但實際上這並不一定會提升速度,相反卻喪失了程序啟動快的這一系統特色,得不償失。大家不妨換種觀念習慣來使用android系統。

熱點內容
搭建自己的伺服器直播間 發布:2025-02-13 11:27:34 瀏覽:986
酷狗音樂試聽緩存刪了會怎樣 發布:2025-02-13 11:02:12 瀏覽:267
python游戲服務端 發布:2025-02-13 11:00:19 瀏覽:927
雲原生伺服器 發布:2025-02-13 10:55:34 瀏覽:827
linuxip命令查看ip 發布:2025-02-13 10:49:45 瀏覽:421
java基礎應用 發布:2025-02-13 10:44:53 瀏覽:711
linux內核搶占 發布:2025-02-13 10:36:32 瀏覽:890
家裝公司源碼 發布:2025-02-13 10:35:35 瀏覽:49
aspnet更新資料庫 發布:2025-02-13 10:35:34 瀏覽:385
海爾壓縮機不工作 發布:2025-02-13 10:15:32 瀏覽:224