android內存清理代碼
❶ androidstudio虛擬機清理內存
1) clean project 清理項目
2) invalidate caches restart 清理Android studio緩存
1) 使用clean project
工具欄 Build --> clean project
2) 使用invalidate caches restart
選擇工具欄 File --> Invalidate Caches /Restart... -> Invalidate and Restart 重啟Android studio
❷ Android手機清理內存的方法
和PC用戶一樣智能手機用戶也會遇到手機存儲不足的問題,對於Android手機來說因為系統不支持安裝程序到SD卡,手機配置的存儲容量也有限,很多用戶都碰到過安裝程序太多系統內存不足的問題。雖然Android2.2系統開始已經支持Apps2SD功能,但是很多用戶使用後發現Android2.2系統下仍然有很多應用程序無法安裝到SD卡,即可程序支持移動到SD卡,但是還會保留一部分系統文件和隱私文件在手機內存里。另外還有一些程序像Widgets,動態壁紙和一些系統程序,如果安裝在SD卡根本無法正常工作,內存不足依然是讓很多用戶感到棘手的問題。不過Android作為一種優秀的移動操作系統,提供了幾種可以清理和釋放內存空間的辦法,我們總結了下面幾點希望可以幫助用戶解決燃眉之急。
清理大型應用程序的緩存數據。
1、通過清理程序的緩存文件,釋放的內存空間會讓你喜出望外。
2、進入手機設置選項,選擇設置>應用程序>管理應用程序。
3、按一下Menu鍵,選擇「按大小排序」選項(如果是Android2.2手機先要選擇已下載標簽),然後就可以按照應用程序大小排列所有手機安裝的應用程序。
4、點擊一款列表中的應用程序,如果程序有緩存文件可以顯示大小,直接點擊「清除緩存」選項就可以釋放這些緩存文件占據的空間。
5、有一些應用程序的緩存文件可能多達數MB,比如GoogleMaps,Market,瀏覽器和相冊程序,清理這幾個程序的緩存文件就可以釋放相當可觀的空間。
6、很多手機廠商都在旗下手機預裝了自己開發的UI程序,比如HTCSense,MOTOBLUR等,如果你打算使用LaunherPro或者ADW這樣的launcher程序替代HTCSense,你可以清理甚至刪除HTCSense的數據文件,這個操作可以讓你的'手機多出幾十MB空間。
7、另外AndroidMarket還提供一些自動清除緩存文件的應用程序,比如QuickAppCleanCache這款收費軟體。對於已經取得root許可權的手機用戶,可以從Market下載CacheCleaner,CacheMate和MoveCache這些程序來快速方便的清除程序緩存文件。
刪除那些你從來不用或者很少使用的應用程序這是很多用戶都會面對的問題,默默忍受著手機內存不足的報警,甚至犧牲系統性能,就是捨不得刪除那些從來不用或者極少使用的應用程序,這可能也是一種強迫症。刪除這些程序你會發現手機從此海闊天空,而且你沒有任何損失。移動所以可以移動的應用程序數據到SD卡運行Android2.2系統的手機支持安裝應用程序到SD卡,確保檢查所有你安裝的應用程序如果支持appstoSD卡功能一定要移動到SD卡,對於一些大型軟體特別是游戲程序節省的容量相當可觀。
不過一定要注意Widgets程序,捆綁Widgets的程序,以及動態壁紙程序和那些需要在後台運行並且和系統進行交互的應用程序不要移動到SD卡存儲,否則程序可能無法正常工作。如果覺得每個程序單獨設置太麻煩,可以藉助Apps2SD和SDMove這樣的程序簡化操作過程。對於那些動手能力比較強的用戶可以通過網上的教程設置應用程序默認安裝到SD卡,這樣就可以一勞永逸。
❸ vivo手機清理垃圾代碼
一、清理運行內存的方法:
1、調出控制中心,找到一鍵加速,清理後台應用;
2、可以進入i管家--應用管理--許可權管理--自啟動,關閉所有軟體的自啟動許可權;(關閉QQ,微信等軟體自啟動新消息可能不能及時提醒)
3、取消一鍵加速白名單。
二、清理存儲空間的方法
1、進入i管家--空間清理,清理垃圾緩存;
2、進入文件管理中刪除不需要的文件(安裝包、視頻、壓縮包等);
3、備份數據後進入設置--應用與許可權--應用管理--找到對應的軟體--存儲--清除緩存;
❹ 如何在Android實現桌面清理內存簡單Widget小控制項
我們經常會看到類似於360、金山手機衛士一類的軟體會帶一個widget小控制項,顯示在桌面上,上面會顯示現有內存大小,然後會帶一個按鍵賣亮功能來一鍵清理內存,殺死後台進程的功能,那麼這個功能是如何實現的呢,我們今天也來嘗試做一個類似的功能的小控制項。
效果圖:
一、UI部分的編寫:
參照Google的文檔,首先在建立一個類繼承 AppWidgetProvider
import android.appwidget.AppWidgetProvider;
public class MyWidget extends AppWidgetProvider {
}
然後在清單文件中申明它,我們必須注意到,AppWidgetProvider實際上是BroadcastReceiver,所以要注冊成一個receiver,然後還有一些其他的東西需要注意:
<receiver android:name="com.alexchen.widget.MyWidget" >
<intent-filter>
<action android:name="困配蠢android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/example_appwidget_info" />
</receiver>
android.appwidget.action.APPWIDGET_UPDATE
表明這個receiver能夠接受一個APPWIDGET_UPDATE的廣播,而且在這里,只能加入這一個action。
android.appwidget.provider 表明數據類型時widget提供者提供的數據, example_appwidget_info 表明這個widget的參數配置文件名和位置
那麼接下來就需要在res目錄下建立一個xml文件夾,並且在其中建立一個 example_appwidget_info.xml 的配置文件,Google的文檔中給出了示例有很多參數,實際上關鍵的參數只有下面的4個:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="94dp"
android:minHeight="72dp"
android:updatePeriodMillis="86400000"
android:initialLayout="@layout/example_appwidget">
</appwidget-provider>
其中, minWidth 和 minHeight 代表這個widget控制項所佔據的最小空間,這個空間一般來講不需要太大,因為太大的話,一個屏幕可能都沒辦法放下,Google的官汪陪方文檔的說法是大於4x4的就可能無法顯示。
updatePeriodMillis 代表數據更新的時間,這里86400000毫秒實際上是24小時,可能最開始看到這個參數會想我能否將其設的很小,每一秒刷新很多次?, 實際上對於 updatePeriodMillis 這個參數而言, 即算你設的再小也沒用,Google設定widget控制項這個參數控制的最短update時間為30分鍾,就算將其設置在30分鍾以內也會以30分鍾的頻率來更新數據。
initialLayout 參數代表的是本widget空間的布局文件。
那麼下一步就是定義出一個對應的布局文件。我們可以簡單的在layout目錄下建立一個布局文件example_appwidget.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="200dp"
android:layout_height="80dp"
android:background="@android:color/white"
android:gravity="center_vertical"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_widget"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="widget控制項測試"
android:textColor="@android:color/black"
android:textSize="15sp" />
<Button
android:id="@+id/btn_clear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="清理內存"
android:textColor="#ff000000" />
</LinearLayout>
❺ android怎麼壓縮一個bitmap佔用空間大小
在Android應用里,最耗費內存的就是圖片資源。而且在Android系統中,讀取點陣圖Bitmap時,分給虛擬機中的圖片的堆棧大小隻有8M,如果超出了,就會出現OutOfMemory異常。所以,對於圖片的內存優化,是Android應用開發中比較重要的內容。 1) 要及時回收Bitmap的內存 Bitmap類有一個方法recycle(),從方法名可以看出意思是回收。這里就有疑問了,Android系統有自己的垃圾回收機制,可以不定期的回收掉不使用的內存空間,當然也包括Bitmap的空間。那為什麼還需要這個方法呢? Bitmap類的構造方法都是私有的,所以開發者不能直接new出一個Bitmap對象,只能通過BitmapFactory類的各種靜態方法來實例化一個Bitmap。仔細查看BitmapFactory的源代碼可以看到,生成Bitmap對象最終都是通過JNI調用方式實現的。所以,載入Bitmap到內存里以後,是包含兩部分內存區域的。簡單的說,一部分是Java部分的,一部分是C部分的。這個Bitmap對象是由Java部分分配的,不用的時候系統就會自動回收了,但是那個對應的C可用的內存區域,虛擬機是不能直接回收的,這個只能調用底層的功能釋放。所以需要調用recycle()方法來釋放C部分的內存。從Bitmap類的源代碼也可以看到,recycle()方法里也的確是調用了JNI方法了的。 那如果不調用recycle(),是否就一定存在內存泄露呢?也不是的。Android的每個應用都運行在獨立的進程里,有著獨立的內存,如果整個進程被應用本身或者系統殺死了,內存也就都被釋放掉了,當然也包括C部分的內存。 Android對於進程的管理是非常復雜的。簡單的說,Android系統的進程分為幾個級別,系統會在內存不足的情況下殺死一些低優先順序的進程,以提供給其它進程充足的內存空間。在實際項目開發過程中,有的開發者會在退出程序的時候使用Process.killProcess(Process.myPid())的方式將自己的進程殺死,但是有的應用僅僅會使用調用Activity.finish()方法的方式關閉掉所有的Activity。 經驗分享: Android手機的用戶,根據習慣不同,可能會有兩種方式退出整個應用程序:一種是按Home鍵直接退到桌面;另一種是從應用程序的退出按鈕或者按Back鍵退出程序。那麼從系統的角度來說,這兩種方式有什麼區別呢?按Home鍵,應用程序並沒有被關閉,而是成為了後台應用程序。按Back鍵,一般來說,應用程序關閉了,但是進程並沒有被殺死,而是成為了空進程(程序本身對退出做了特殊處理的不考慮在內)。 Android系統已經做了大量進程管理的工作,這些已經可以滿足用戶的需求。個人建議,應用程序在退出應用的時候不需要手動殺死自己所在的進程。對於應用程序本身的進程管理,交給Android系統來處理就可以了。應用程序需要做的,是盡量做好程序本身的內存管理工作。 一般來說,如果能夠獲得Bitmap對象的引用,就需要及時的調用Bitmap的recycle()方法來釋放Bitmap佔用的內存空間,而不要等Android系統來進行釋放。 下面是釋放Bitmap的示例代碼片段。 // 先判斷是否已經回收 if(bitmap != null && !bitmap.isRecycled()){ // 回收並且置為null bitmap.recycle(); bitmap = null; } System.gc(); 從上面的代碼可以看到,bitmap.recycle()方法用於回收該Bitmap所佔用的內存,接著將bitmap置空,最後使用System.gc()調用一下系統的垃圾回收器進行回收,可以通知垃圾回收器盡快進行回收。這里需要注意的是,調用System.gc()並不能保證立即開始進行回收過程,而只是為了加快回收的到來。 如何調用recycle()方法進行回收已經了解了,那什麼時候釋放Bitmap的內存比較合適呢?一般來說,如果代碼已經不再需要使用Bitmap對象了,就可以釋放了。釋放內存以後,就不能再使用該Bitmap對象了,如果再次使用,就會拋出異常。所以一定要保證不再使用的時候釋放。比如,如果是在某個Activity中使用Bitmap,就可以在Activity的onStop()或者onDestroy()方法中進行回收。 2) 捕獲異常 因為Bitmap是吃內存大戶,為了避免應用在分配Bitmap內存的時候出現OutOfMemory異常以後Crash掉,需要特別注意實例化Bitmap部分的代碼。通常,在實例化Bitmap的代碼中,一定要對OutOfMemory異常進行捕獲。 以下是代碼示例。 Bitmap bitmap = null; try { // 實例化Bitmap bitmap = BitmapFactory.decodeFile(path); } catch (OutOfMemoryError e) { // } if (bitmap == null) { // 如果實例化失敗 返回默認的Bitmap對象 return defaultBitmapMap; } 這里對初始化Bitmap對象過程中可能發生的OutOfMemory異常進行了捕獲。如果發生了OutOfMemory異常,應用不會崩潰,而是得到了一個默認的Bitmap圖。 經驗分享: 很多開發者會習慣性的在代碼中直接捕獲Exception。但是對於OutOfMemoryError來說,這樣做是捕獲不到的。因為OutOfMemoryError是一種Error,而不是Exception。在此僅僅做一下提醒,避免寫錯代碼而捕獲不到OutOfMemoryError。 3) 緩存通用的Bitmap對象 有時候,可能需要在一個Activity里多次用到同一張圖片。比如一個Activity會展示一些用戶的頭像列表,而如果用戶沒有設置頭像的話,則會顯示一個默認頭像,而這個頭像是位於應用程序本身的資源文件中的。 如果有類似上面的場景,就可以對同一Bitmap進行緩存。如果不進行緩存,盡管看到的是同一張圖片文件,但是使用BitmapFactory類的方法來實例化出來的Bitmap,是不同的Bitmap對象。緩存可以避免新建多個Bitmap對象,避免內存的浪費。 經驗分享: Web開發者對於緩存技術是很熟悉的。其實在Android應用開發過程中,也會經常使用緩存的技術。這里所說的緩存有兩個級別,一個是硬碟緩存,一個是內存緩存。比如說,在開發網路應用過程中,可以將一些從網路上獲取的數據保存到SD卡中,下次直接從SD卡讀取,而不從網路中讀取,從而節省網路流量。這種方式就是硬碟緩存。再比如,應用程序經常會使用同一對象,也可以放到內存中緩存起來,需要的時候直接從內存中讀取。這種方式就是內存緩存。 4) 壓縮圖片 如果圖片像素過大,使用BitmapFactory類的方法實例化Bitmap的過程中,需要大於8M的內存空間,就必定會發生OutOfMemory異常。這個時候該如何處理呢?如果有這種情況,則可以將圖片縮小,以減少載入圖片過程中的內存的使用,避免異常發生。 使用BitmapFactory.Options設置inSampleSize就可以縮小圖片。屬性值inSampleSize表示縮略圖大小為原始圖片大小的幾分之一。即如果這個值為2,則取出的縮略圖的寬和高都是原始圖片的1/2,圖片的大小就為原始大小的1/4。 如果知道圖片的像素過大,就可以對其進行縮小。那麼如何才知道圖片過大呢? 使用BitmapFactory.Options設置inJustDecodeBounds為true後,再使用decodeFile()等方法,並不會真正的分配空間,即解碼出來的Bitmap為null,但是可計算出原始圖片的寬度和高度,即options.outWidth和options.outHeight。通過這兩個值,就可以知道圖片是否過大了。 BitmapFactory.Options opts = new BitmapFactory.Options(); // 設置inJustDecodeBounds為true opts.inJustDecodeBounds = true; // 使用decodeFile方法得到圖片的寬和高 BitmapFactory.decodeFile(path, opts); // 列印出圖片的寬和高 Log.d("example", opts.outWidth + "," + opts.outHeight); 在實際項目中,可以利用上面的代碼,先獲取圖片真實的寬度和高度,然後判斷是否需要跑縮小。如果不需要縮小,設置inSampleSize的值為1。如果需要縮小,則動態計算並設置inSampleSize的值,對圖片進行縮小。需要注意的是,在下次使用BitmapFactory的decodeFile()等方法實例化Bitmap對象前,別忘記將opts.inJustDecodeBound設置回false。否則獲取的bitmap對象還是null。 經驗分享: 如果程序的圖片的來源都是程序包中的資源,或者是自己伺服器上的圖片,圖片的大小是開發者可以調整的,那麼一般來說,就只需要注意使用的圖片不要過大,並且注意代碼的質量,及時回收Bitmap對象,就能避免OutOfMemory異常的發生。 如果程序的圖片來自外界,這個時候就特別需要注意OutOfMemory的發生。一個是如果載入的圖片比較大,就需要先縮小;另一個是一定要捕獲異常,避免程序Crash。