我的應用程序有很多圖像,有時由於內存不足而崩潰。 我寫了這個函數,我在開發者網站上找到了。
如何檢測Android中的低內存?
public void onLowMemory(){
}
但問題是,這個功能永遠不會在那些低內存的情況下調用。 我應該怎麼做才能調用這個函數。 當設備上的內存不足時,我需要提醒用戶。
我的應用程序有很多圖像,有時由於內存不足而崩潰。 我寫了這個函數,我在開發者網站上找到了。
如何檢測Android中的低內存?
public void onLowMemory(){
}
但問題是,這個功能永遠不會在那些低內存的情況下調用。 我應該怎麼做才能調用這個函數。 當設備上的內存不足時,我需要提醒用戶。
我的應用程序有大量的圖片,有時死機,由於低 內存
那部分是不明確的,如果你的應用程序從互聯網或最終用戶下載任何影像擷取來自圖片庫圖片並添加它?在這種情況下
或者更好的,你可以從內存中使用任何算法自己刪除圖像(怎麼樣最近最少使用/查看?)
另一種情況是你的應用程序本身使用太多的內存,因爲不需要的引用和泄漏..這種情況下,你從來沒有警告用戶,沒有更多的內存..這只是你的責任有效使用內存......這種情況通常主要發生在
在任何情況下,這是不明智的,以提醒用戶低內存..程序員應該總是編程思考你可以通過使用更少的內存使應用程序更好..
This線程就會知道你的內存佔用inforamation非常有用的..
而且關於MAT工具使用...
我從圖庫中加載圖像。 – James
下面是我如何使用onLowMemory一個例子,在所有MyApplication 實施爲了清理乾淨,我會刷新內存緩存(主要用於圖片)和谷歌跟蹤器;
@Override
public void onLowMemory() {
super.onLowMemory();
Log.w(TAG, "onLowMemory() -> clearImageCacheFu!!!");
clearImageCacheFu();
dispatchGoogleTracker();
stopGoogleTracker();
}
這可能會給你一個想法,以適應你的需要。 希望這有助於。
但是對於我來說這個函數永遠不會被調用。我沒有使用@Override表示法。這是原因。 – James
onLowMemory()
是不是一個很大的幫助,因爲它得到僅在整個系統運行內存,並在情況下,您應用程序正在運行了它的可用堆的不次叫空間。
所以我的回答是,你不應該依賴onLowMemory()
被調用。恕我直言,你的問題沒有回調方法。
您只需定期輪詢可用堆空間並檢查是否內存不足。
Runtime.getRuntime().maxMemory();
Runtime.getRuntime().totalMemory();
Runtime.getRuntime().freeMemory();
隨着onLowMemory()
和onTrimMemory()
,該監控系統內存,這裏的監視應用程序內存的方式。它使用Zsolt Safrany的核心答案。
private final float CHECK_MEMORY_FREQ_SECONDS = 3.0f;
private final float LOW_MEMORY_THRESHOLD_PERCENT = 5.0f; // Available %
private Handler memoryHandler_;
public void onCreate(Bundle savedInstanceState) {
// Do Stuff...
// Start Monitoring App Memory Availablity
memoryHandler_ = new Handler();
checkAppMemory();
}
public void checkAppMemory(){
// Get app memory info
long available = Runtime.getRuntime().maxMemory();
long used = Runtime.getRuntime().totalMemory();
// Check for & and handle low memory state
float percentAvailable = 100f * (1f - ((float) used/available));
if(percentAvailable <= LOW_MEMORY_THRESHOLD_PERCENT)
handleLowMemory();
// Repeat after a delay
memoryHandler_.postDelayed(new Runnable(){ public void run() {
checkAppMemory();
}}, (int)(CHECK_MEMORY_FREQ_SECONDS * 1000));
}
public void handleLowMemory(){
// Free Memory Here
}
從API級別14開始,有一種名爲onTrimMemory(int)
的方法可以滿足您的需求。
這裏的DOC:
http://developer.android.com/reference/android/content/ComponentCallbacks2.html
你能夠在系統即將重拾記憶,以及如何批評目前的情況是通知。
'onTrimMemory'與可用堆空間無關 - 它僅考慮整體(即設備範圍)可用內存,以及該應用程序在前臺運行多久以前。 – ubuntudroid
「我的應用程序有很多圖像,有時由於內存不足而崩潰。」 - 什麼意思?由於大量圖像內存不足或者您想知道存儲設備的內存?兩者都有不同的場景。 :-) – user370305