內存分配android
A. android 4.0給每個應用程序分配多少內存,還是動態分配的嗎
android 4.0給每個應用程序分配內存是動態分配的。
應用程序,指為完成某項或多項特定工作的計算機程序,它運行在用戶模式,可以和用戶進行交互,具有可視的用戶界面。
內存是計算機中重要的部件之一,它是與CPU進行溝通的橋梁。計算機中所有程序的運行都是在內存中進行的,因此內存的性能對計算機的影響非常大。內存(Memory)也被稱為內存儲器,其作用是用於暫時存放CPU中的運算數據,以及與硬碟等外部存儲器交換的數據。
B. android studio怎麼分配模擬器內存不足
按他的意思是指用於啟動虛擬機的內存不夠,不過你去設置jvm的啟動內存也沒有用,找了半天,終於知道個方法打開工程的gradle.properties文件,添加org.gradle.jvmargs=-Xmx512m -XX:MaxPermSize=512m,問題就解決了,其實google在這個文件的注釋已經有告訴我們這個用法,就是用來設置android studio的啟動內存,我們從這里知道,android
studio的默認最大內存是10g,所以對於我們這些4g,8g內存的電腦來說,內存確實不夠用,不過為什麼有時不會出問題有時會,可能是google優化不好吧,但這又有個問題,我把參數改為1g,2g都不行,一定要設置為512m才行,只能說明android
studio確實有bug。
網上找的,你試試看,你的錯誤代碼都沒顯示完全
C. 安卓的內存卡怎樣分區
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!安卓手機如何給內存卡分區~ 參考資料:
儲器(ROM)兩種。手機ROM相當於PC上的硬碟,用於存儲手機操作系統和軟體,也叫FLASH ROM,決定手機存儲空間的大小。手機RAM相當於PC的內存,其大小決定手機的運行速度。
要把大象裝冰箱里總共分三步,而Android系統中把軟體安裝到SD卡上,比這還簡單,兩步就夠了:
一、存儲卡分區
首先我們需要對手機SD卡進行分區,分一個FAT32分區和一個Ext3分區,FAT32分區用於正常存儲圖片、音樂、視頻等資料,而linux格式的Ext3分區就是用於擴容安裝軟體的分區。以筆者的2G SD卡為例,FAT32分區1.35GB,Ext3分區494MB。下載並安裝Acronis Disk Director Suite軟體。將手機SD卡裝入讀卡器並連接電腦,然後運行Acronis Disk Director Suite軟體。
1.FAT32分區。找到代表SD卡的磁碟分區,點擊右鍵,選擇「刪除」命令,刪除已有分區。當成為「未分配」分區時,點擊右鍵,選擇「創建分區」,在彈出的對話框中,文件系統選擇:FAT32,創建為「主分區」,設置好分區大小1.35GB,點擊確定按鈕。
2.Ext3分區。在剩餘的494MB分區上,點擊右鍵,選擇「創建分區」,在彈出的對話框中,文件系統選擇:Ext3,創建為「主分區」,設置好分區大小494MB,點擊確定按鈕。
3.確認分區。上述分區設定完成後,軟體只是記錄了分區操作,並沒有真正在SD卡上進行分區。點擊軟體工具欄中的「提交」按鈕,確認執行分區操作,提示「操作成功完成」說明分區成功了。
二、將軟體移動到SD卡
存儲卡分區完成後我們只需要把系統默認的軟體安裝目錄/data/app轉移到SD卡的Ext3分區上,然後通過ln命令建立軟鏈接,使系統自動把軟體安裝到SD卡上,達到節省手機內存空間的目的。
將存儲卡裝回手機,重新啟動,使系統識別到Ext3分區。在手機上運行超級終端,依次輸入以下命令來驗證系統是否識別了Ext3分區:
su (會提示高級許可權授權,選擇「總是同意」)
busybox df –h
如果顯示的列表中有/dev/block/mmcblk0p2的信息說明系統已成功識別了Ext3分區。
然後依次輸入以下命令將/data/app目錄轉移到SD卡的Ext3分區:
cp –a /data/app /system/sd/
(將/data/app目錄復制到/system/sd/下)
rm –r /data/app
(刪除/data/app目錄)
ln –s /system/sd/app /data/app
(建立軟鏈接)
Reboot
(重啟手機)
重啟之後,手機上安裝的所有軟體就全部轉移到了SD卡上,看看你的手機可用空間是不是增大了。以後再安裝軟體也是直接安裝到SD卡上,不用擔心空間不足的問題了,而且這樣做還有一個好處,刷新ROM後,以前安裝過的軟體並沒有被清除,還保存在SD卡上,輸入下列命令就可以輕松恢復,不用再一一安裝了,非常方便實用。
su
(取得高級許可權)
cd /data
(進入/data目錄)
cp –a app /system/sd/app
(將app目錄中的內容復制到/system/sd/app目錄)
rm –r app
(刪除app目錄)
ln –s /system/sd/app /data/app
(建立軟鏈接)
reboot
(重新啟動)
擴容效果體驗:
刷新ROM後未安裝任何軟體,手機可用空間為87MB,安裝若干軟體後,可用空間下降為73MB。將軟體目錄轉移到SD卡上後,可用空間變為80MB。可能有的「電筒」會有疑惑,為什麼沒恢復到87MB呢?這是因為我們只是將軟體移動到了SD卡上,而軟體的緩存數據仍然會佔用手機內存,所以手機內存還是會下降。當然軟體的緩存數據也可以移動到SD卡上,但這樣會拖慢軟體運行速度,所以不推薦大家使用。
注意事項:
1.軟體移動到SD卡上後,原有的部分桌面插件會無法正常顯示,刪除後,重新加入桌面即可。
2.SD卡的Ext3分區可以視為手機硬體的一部分,移除SD卡後,安裝的軟體將無法運行。插入SD卡,重新啟動手機即可正常使用。
這個教程有哪個高手可以成功的話,給我說一聲哦!
引用 報告 回復
-
D. 安卓用戶請進,關於RAM內存問題
有很多同學表示,自己的機子開機內存怎麼只有200m啦,用一會怎麼就變成100多m啦,怎麼有很多程序在後台關都關不了啦。有這個疑惑的看一下內容。
首先你要知道Android系統 是 基於Linux 2.6內核開發的開源操作系統(linux是啥都不知道自己去網路吧),而linux系統的內存管理有其獨特的動態存儲管理機制。不過Android系統對Linux的內存管理機制進行了優化,Linux系統會在進程活動停止後就結束該進程,而Android把這些進程都保留在內存中,直到系統需要更多內存為止。這些保留在內存中的進程通常情況下不會影響整體系統的運行速度,並且當用戶 再次激活這些進程時,提升了進程的啟動速度。
如果你懂java,就會更容易理解Android系統的內存管理機制。與java的內存回收收機制類似,系統有一個規則來回收內存。進行內存調度有個閾值,只有低於這個值系統才會按一個列表來關閉用戶不需要的東西。Android系統有六類進程:前台進程、可見進程、次要服務、後台進程、內容供應節點、空進程。對於高手 而言可以用MinFreeManager之類的軟體進行進程管理,分別為六類進程設定不同的閾值來操縱系統的內存分配機制。不過對於一般用戶而言,Android系統默認的分配機制已經可以滿足使用需要,因此也不需要再去調整。
對於一些內存很低的低端Android機而言,系統默認的內存分配機制無法實現很完善的內存調配。所以在運行大型游戲時需要先清理一下內存。然而對於中端的android手機而言,512m的總內存和幾十m的空餘內存已經可以充分的滿足系統自動調配的需要,因此完全沒有必要老去殺進程、清內存。
有的兄弟說後台掛著程序很費電,事實上Android的應用在被切換到後台時,它其實已經被暫停了,並不會消耗cpu資源,只保留了運行狀態。至於QQ、音樂播放之類的程序可以在後台運行,是因為這些程序在後台開啟了服務,而服務可以後台運行,所以沒有帶服務的應用在後台是完全不耗電的,沒有必要關閉。這種設計本來就是一個非常好的設計,下次啟動程序時,會更快,因為不需要讀取界面資源。
Android系統這樣的設計不僅非常適合移動終端的需要,而且減少了系統崩潰的可能,確保了系統的穩定性。老想著清理內存的同學完全是因為被塞班或者 Windows毒害太深,事實上,經常用Taskiller之類的軟體關閉後台所有進程,很容易造成系統的不穩定。很多時候出現問題,只要重啟就能解決,其原因也在於此。
說了這么多,總結起來很簡單,牛B的人自己去操縱系統內存分配的閾值,而普通用戶則是想怎麼用就怎麼用,完全不用去鳥剩餘內存的問題,那些內存清理的程序完全可以扔到一邊了。 PS:
1.按home退出,程序保留狀態為後台進程;按返回鍵退出,程序保留狀態為空進程。空進程的oom_adj評值高於後台進程,更容易被系統清理。所以推薦用返回鍵退出。
2.UC、憤怒小鳥、都市賽車之類程序本身提供關閉功能 的,還是盡量主動關閉。瀏覽器 、電子市場、opera mini等不提供關閉功能的,直接返回鍵退出就行。
我想每個人第一次用Android的時候,不可避免的會去裝個任務管理器,然後對裡面時刻都停留著一大堆的程序表示觸目驚心,然後會在桌面 上建立一個快捷清空內存的按鈕,時不時啪的按一下,看著內存剩餘數量從30多變成100多然後很有快感...其實吧,Android是Linux的內核,每一個程序都是一個獨立的JAVA虛擬機,就和油湯里的油花一樣互不幹擾,這樣充分保證了萬一某個程序的JAVA虛擬機崩潰,系統依舊穩定正常運行.而 Android和傳統Linux不一樣的地方又在於,傳統Linux在進程活動停止後就結束了,這就類似於我們用S60和WM一樣,關閉程序,內存釋放. 而Android會把這些進程保留在內存里,幹嘛呢?為了保證你再次激活這些進程時候啟動的更快,比如說我們掛在桌面的Widgets,具體一點我們拿新浪微博舉例吧.我剛看完,退出,突然我想我發一條微博吧,那麼這個時候我可以直接在桌面Widgets上操作----設想一下如果我退出的時候這個進程就終止了,那麼我在桌面上點擊Widgets的時候會不會卡頓一下甚至沒有響應?----這就跟我們把Widgets掛在桌面的行為完全背離了,放在桌面上就是為了能隨時觀察到程序運行的情況,以及隨時可以快速調用程序.所以Android並沒有在進程活動停止就釋放對應的內存.那麼也許你還是會有疑問,那麼內存夠不夠用呢?
512的內存被我們用的只剩56M是不是很蛋*疼*?其實系統一點也不卡的,蛋定蛋定
是的,我理解,因為大家這么多年Windows都用習慣了,Windows內存不足的時候機器卡的會讓你想砸掉機箱,而且調用虛擬內存的時候硬碟喀喀喀想的讓你肉疼.你肯定也會怕你的手機明明512M內存結果就剩下30來M把你卡到崩潰.事實上呢,Android會在系統需要更多內存的時候,去釋放掉那些佔用內存的進程----這個活動是智能的.最早大家認為是有個排序,比如最近使用過哪些程序(LRU機制,Last Recently Used),然後結束最早的進程.不過並非如此,否則就變成我們上小學時候那樣,個子高的塊頭大的男生跟班長下去拔草扛新書,女生們留在班裡綉花吧... 這樣很明顯不公平而且沒准會結束掉那些我們並不想結束掉的進程----譬如說這會兒我想切回到剛才後台的網頁繼續瀏覽結果悲愴的發現它被系統給我強制關閉了...
Android把進程分成了一些優先順序,比如
前台進程(Foreground),比如我們正在看書,那麼看書的程序就是前台進程,這些進程是不會被系統優先結束的.當我把它切到後台的時候,它就變成後台進程了.
還有可見進程(Visible),這個怎麼說呢,譬如輸入法 程序,你平時是看不見它的,但是在你打開輸入界面的時候,它會很快的彈出來,而不是讓你等啊等啊等,看不到的原因是透明度的機制,咱就不要鑽牛角尖討論為啥我看不見了...還有桌面的Widgets,比如我們的桌面時鍾,這個東西就是可見的,如果它被系統終止了會有什麼樣的結果?這個Widgets依然會顯示在桌面上,但是時針不走了...
主要服務,比如說,電話 的撥號功能,你也不想正急著打電話呢結果人家給你卡半天吧,尤其像我這樣聯系人上2000的,載入一遍真的很慢啊...所以這些主要服務平時也不會被系統自動結束,除非你非要關它,關了也會自己重新載入的.這也是你完全釋放內存以後過一會就看著內存可用值又慢慢降低的原因.
次要服務(secondary server),諸如谷歌企業套件,Gmail,聯系人,看著這些程序出現在任務管理器里可能你會非常的莫名其妙,丫的這都哪跟哪啊我沒開啊...其實它們和一些系統功能也是息息相關的,比如Gmail的郵件推送,我們時常需要用到它們,所以系統也太會去終止它們.甚至於台電Teclast機器上著名的Status BAR,這個也是次要服務,但是其實它承接著整個系統界面的運行,所以,如果你強行關閉所有進程的時候,你的屏幕會變成一片白...然後慢慢等Status BAR載入.
後台進程(hidden),就是我們通常意義上理解的啟動後被切換到後台的進程,比如如瀏覽器和閱讀器.後台進程的管理策略有多種,但是一般來講,系統都會視內存情況,盡可能多的保留後台程序,這樣會影響到你啟動別的程序的運行速度----我想這個很好理解,因為內存確實不夠了,而且你還沒讓系統自動釋放內存.但好處是,你再次切換到這些已啟動的程序時幾乎是無縫的,速度絕對比你從0開始啟動它要快得多.所以,這種後台進程在內存極度不夠的時候,肯定會被系統選擇性的幹掉的.
內容供應節點(content provider),沒有程序實體,僅提供內容供別的程序去用的,比如日歷供應節點,郵件供應節點等.在系統自動終止進程時,這類程序享有優先的被幹掉權...
空進程(empty),沒有任何東西在內運行的進程,有些程序在退出後,依然會在進程中駐留一個空進程,這個進程里沒有任何數據在運行,作用往往是提高該程序下次的啟動速度或者記錄程序的一些歷史信息.這部分進程無疑是系統最先終止的.
說了這么多,其實還是要結合實際的程序來看一下的,比如Android這個很有名的自動內存調配的軟體,Auto Memory Manager,它的設置 和幫助界面就如上面所說的,它自動提供了多種默認配置,例如極速模式,這個模式下,會幫助你在設定好的臨界值區間上,結束空進程以及內容供應節點等等低優先順序保留權的進程,來給你騰出更多的內存,加速新運行程序打開的速度,但是它也說明了這種模式的弊端,就是一些可能你不想被關閉的進程會被過早的關閉,比如說,鬧鍾----在G2 G3還很火爆的2009年,很多用戶在買完手機後給我抱怨,哎呀這個機器鬧鍾怎麼老不響啊...上班老遲到...其實這就是因為手動結束進程的時候結果把鬧鍾也給幹掉了.系統的時間是會一直走的,這屬於主要服務,而鬧鍾呢,只是主要服務的一個附屬品,所以被結束後,是不會自動被啟動的,既然沒有啟動自然就不會響了.與此類似的例子就是里程碑不充電的BUG,這是因為Moto的機器里有個USB的進程,如果你把它結束後,理論上會重新啟動的但是也會不啟動,後面這種情況出現的結果就是你插充電器沒反應,插數據線 連電腦 沒反應...重啟手機就好了.
當然我知道大家的潔癖很多,有的人就是見不得內存值太小...好吧如果你不想一些被系統認為不太重要而你又很需要的進程被你自己親手扼殺的話,那麼我推薦你使用高級任務管理器這個程序,你可以把一些進程自動隱藏起來,也就是說當你揮起狼牙棒橫掃一堆進程的時候,你設置好的幾個進程是不會受任何影響的,比如桌面Launcher,比如鬧鍾,比如USB,等等等等.但話說回來,我是不建議大家去手動管理Android的內存,也許你會不習慣----我也沒啥好勸告的,總之,不要把你的智能機想的那麼笨就行了.
剛才全殺掉進程後,過了一會,我們的愛機又變成剩餘60M內存,還是沒啥鴨梨啊...如果你感興趣可以做個試驗,內存很少的時候,你打開一個大游戲,然後退出,你會發現。。。如此這般。。。
E. 在Android開發中,有哪些好的內存優化方式
1. 使用更加輕量的數據結構
例如,我們可以考慮使用ArrayMap/SparseArray而不是HashMap等傳統數據結構。通常的HashMap的實現方式更加消耗內存,因為它需要一個額外的實例對象來記錄Mapping操作。另外,SparseArray更加高效,在於他們避免了對key與value的自動裝箱(autoboxing),並且避免了裝箱後的解箱。
2. 避免在Android裡面使用Enum
Android官方培訓課程提到過「Enums often require more than twice as much memory as static constants. You should strictly avoid using enums on Android.」,具體原理請參考《Android性能優化典範(三)》,所以請避免在Android裡面使用到枚舉。
3. 減小Bitmap對象的內存佔用
Bitmap是一個極容易消耗內存的大胖子,減小創建出來的Bitmap的內存佔用可謂是重中之重,,通常來說有以下2個措施:
inSampleSize:縮放比例,在把圖片載入內存之前,我們需要先計算出一個合適的縮放比例,避免不必要的大圖載入。
decode format:解碼格式,選擇ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差異
4.Bitmap對象的復用
縮小Bitmap的同時,也需要提高BitMap對象的復用率,避免頻繁創建BitMap對象,復用的方法有以下2個措施
LRUCache : 「最近最少使用演算法」在Android中有極其普遍的應用。ListView與GridView等顯示大量圖片的控制項里,就是使用LRU的機制來緩存處理好的Bitmap,把近期最少使用的數據從緩存中移除,保留使用最頻繁的數據,
inBitMap高級特性:利用inBitmap的高級特性提高Android系統在Bitmap分配與釋放執行效率。使用inBitmap屬性可以告知Bitmap解碼器去嘗試使用已經存在的內存區域,新解碼的Bitmap會嘗試去使用之前那張Bitmap在Heap中所佔據的pixel data內存區域,而不是去問內存重新申請一塊區域來存放Bitmap。利用這種特性,即使是上千張的圖片,也只會僅僅只需要佔用屏幕所能夠顯示的圖片數量的內存大小
4. 使用更小的圖片
在涉及給到資源圖片時,我們需要特別留意這張圖片是否存在可以壓縮的空間,是否可以使用更小的圖片。盡量使用更小的圖片不僅可以減少內存的使用,還能避免出現大量的InflationException。假設有一張很大的圖片被XML文件直接引用,很有可能在初始化視圖時會因為內存不足而發生InflationException,這個問題的根本原因其實是發生了OOM。
5.StringBuilder
在有些時候,代碼中會需要使用到大量的字元串拼接的操作,這種時候有必要考慮使用StringBuilder來替代頻繁的「+」。
6.避免在onDraw方法裡面執行對象的創建
類似onDraw等頻繁調用的方法,一定需要注意避免在這里做創建對象的操作,因為他會迅速增加內存的使用,而且很容易引起頻繁的gc,甚至是內存抖動。
7. 避免對象的內存泄露
類的靜態變數持有大數據對象
靜態變數長期維持到大數據對象的引用,阻止垃圾回收。
非靜態內部類存在靜態實例
非靜態內部類會維持一個到外部類實例的引用,如果非靜態內部類的實例是靜態的,就會間接長期維持著外部類的引用,阻止被回收掉。
資源對象未關閉
資源性對象比如(Cursor,File文件等)往往都用了一些緩沖,我們在不使用的時候,應該及時關閉它們, 以便它們的緩沖及時回收內存。它們的緩沖不僅存在於java虛擬機內,還存在於java虛擬機外。 如果我們僅僅是把它的引用設置為null,而不關閉它們,往往會造成內存泄露。
解決辦法: 比如SQLiteCursor(在析構函數finalize(),如果我們沒有關閉它,它自己會調close()關閉), 如果我們沒有關閉它,系統在回收它時也會關閉它,但是這樣的效率太低了。 因此對於資源性對象在不使用的時候,應該調用它的close()函數,將其關閉掉,然後才置為null. 在我們的程序退出時一定要確保我們的資源性對象已經關閉。 程序中經常會進行查詢資料庫的操作,但是經常會有使用完畢Cursor後沒有關閉的情況。如果我們的查詢結果集比較小, 對內存的消耗不容易被發現,只有在常時間大量操作的情況下才會復現內存問題,這樣就會給以後的測試和問題排查帶來困難和風險,記得try catch後,在finally方法中關閉連接
Handler內存泄漏
Handler作為內部類存在於Activity中,但是Handler生命周期與Activity生命周期往往並不是相同的,比如當Handler對象有Message在排隊,則無法釋放,進而導致本該釋放的Acitivity也沒有辦法進行回收。
更目錄建文件夾
音樂用MUSIC
照片用DCIM
圖片用IMAGE
下載用
DOWNLOAD
視頻和照片可以放一起
大型游戲數據包一般放在ANDROID的DATA里
有些得單獨建立別的比如GAMELOFT的大游戲
G. android系統嚴格規定了每個應用所能分配的最大的內存為多少
Android應用程序的默認最大內存值為16M,不同的手機版本和型號有所不同(我的三星galaxy s3的是256M)
Android應用程序的默認最大內存值
有些應用程序可能會出現內存溢出,譬如:
ERROR/AndroidRuntime(264): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
除了要檢查修正代碼之外,還可以考慮修改Android應用程序的默認最大內存值。
H. 如何調整安卓data,system和cache分區
讓我們開始在Android手機和平板電腦的標準的內部存儲器分區的列表。這些是: / boot目錄 /系統 = /system /恢復 = /recovery /數據 = /data /緩存 =/cache /雜項 =/misc 此外,還有的SD卡分區。 / SD卡 =/sdcard / SD-EXT /boot 需要注意的是/ SD卡被發現在所有的Android設備,其餘的是目前只有在選擇設備。現在,讓我們來看看在每個分區的目的和內容。 / boot目錄 這是分區,使手機開機,正如其名稱所暗示的。它包括引導程序和內核。如果沒有這個分區,該設備將根本就沒有能夠啟動。擦拭從恢復分區只應在絕對必要時,一旦完成,該設備必須重新啟動,然後再安裝一個新的,它可以通過安裝ROM,其中包括一個/ boot分區。 /系統 此分區基本上包含了整個操作系統的內核和引導以外。這包括了Android用戶界面,以及所有的系統預安裝在設備上的應用程序來。擦這個分區將刪除從設備的Android不使其無法啟動的情況下,你仍然可以把手機恢復或bootloader模式,安裝一個新的ROM。 /恢復 恢復分區可以被視為一個可供選擇的引導分區,讓你進入恢復控制台啟動設備,進行先進的恢復和維護操作。要了解更多有關這個分區及其內容,請參閱「關於Android的恢復我們的指南,ClockworkMod恢復」部分。 /數據 也稱為用戶數據,數據分區包含用戶的數據 - 這是在您的聯系人,郵件,設置和已安裝的應用程序,你去。擦這個分區基本上是在您的設備上執行出廠重設,恢復它的方式是當你第一次啟動時,它的方式,這是最後一次正式的或自定義ROM安裝後的。當您執行擦除數據/工廠復位恢復,這是分區,你是擦。 /緩存 這是Android的存儲經常訪問的數據和應用程序組件所在的分區。擦拭緩存不會影響你的個人資料,但根本擺脫現有的數據,這將會自動重建,如您繼續使用該設備。 /雜項 此分區包含各種系統設置,在形式的ON / OFF開關。 USB配置和某些硬體設置等,這些設置可能包括CID(承運人或地區ID),這是一個重要的分區,如果是損壞或丟失的,一些設備的功能將無法正常工作。 / SD卡 這是不是內部存儲器的設備,而是在SD卡上的分區。在使用方面,這是您的存儲空間,使用您認為合適的存儲媒體,文件,光碟等就可以了。擦拭它是完全安全的,只要你備份所有的數據,你需要它,你的電腦。盡管一些用戶安裝的應用程序保存在SD卡上的數據和設置,抹這個分區將讓你失去所有的數據。 在內部和外部SD卡 - 三星Galaxy S和幾片 - 總是用來指到內部SD卡/ SD卡分區的設備,如設備。對於外部SD卡 - 如果有的話 - 替代分區時,器件的不同。在三星的Galaxy S系列設備的情況下,它是/ SD卡/ SD,而在許多其他設備,它是/ sdcard2,。 / SD卡不同,沒有系統或應用程序的任何數據自動存儲在這個外部SD卡,一切都存在於它已添加的用戶。您可以放心地擦拭後,你需要保存的任何數據備份。 / SD-EXT 這不是一個標準的Android分區,但已成為流行的自定義ROM的場景。它基本上是你的SD卡/ data分區時使用的ROM中有特殊的功能,稱為APP2SD +或data2ext啟用的,作為一個附加的分區上。這是特別有用的設備上很少有內部內存分配的/ data分區。因此,用戶要安裝更多的程序比內存允許,可以使這個分區,並使用一個自定義的ROM支持此功能,安裝自己的應用程序,以獲得額外的存儲。 ,擦這個分區在本質上是相同的擦/ data分區 - 你失去你的聯系人,簡訊,市場應用和設置。
I. 如何突破24M內存的限制,為Android程序分配到更多內存
一個Android的應用最多使用16M的內存,如果要突破這個限制,則要使用c/c++編寫JNI,即直接調用底層的函數來處理.linux也是用c/c++來編寫的,因此有非常非常多的函數庫可以調用.
J. android為什麼要內存優化
android為什麼要內存優化是為了防止Android的內存溢出
Android的內存溢出是如何發生的?
Android的虛擬機是基於寄存器的Dalvik,它的最大堆大小一般是16M,有的機器為24M。因此所能利用的內存空間是有限的。如果內存佔用超過了一定的水平就會出現OutOfMemory的錯誤。
為什麼會出現內存不夠用的情況呢?原因主要有兩個:由於程序的失誤,長期保持某些資源(如Context)的引用,造成內存泄露,資源造成得不到釋放。
保存了多個耗用內存過大的對象(如Bitmap),造成內存超出限制。
在android的開發中,要時刻主要內存的分配和垃圾回收,因為系統為每一個dalvik虛擬機分配的內存是有限的,在google的G1中,分配的最大堆大小隻有16M,後來的機器一般都為24M,實在是少的可憐。這樣就需要在開發過程中要時刻注意。不要因為自己的代碼問題而造成OOM錯誤。
Android的優化方式
Android的程序由Java語言編寫,所以Android的內存管理與Java的內存管理相似。程序員通過new為對象分配內存,所有對象在java堆內分配空間;然而對象的釋放是由垃圾回收器來完成的。C/C++中的內存機制是「誰污染,誰治理」,java的就比較人性化了,給我們請了一個專門的清潔工(GC)。
那麼GC怎麼能夠確認某一個對象是不是已經被廢棄了呢?Java採用了有向圖的原理。Java將引用關系考慮為圖的有向邊,有向邊從引用者指向引用對象。線程對象可以作為有向圖的起始頂點,該圖就是從起始頂點開始的一棵樹,根頂點可以到達的對象都是有效對象,GC不會回收這些對象。如果某個對象 (連通子圖)與這個根頂點不可達(注意,該圖為有向圖),那麼認為這個(這些)對象不再被引用,可以被GC回收