安卓開發緩存
㈠ android開發中怎樣緩存數據
寫入文件上也可以,你在sd卡上創建一個文件,寫入其中也是可以的,這樣還可以保存好數據。如果寫入緩存中也不是不行但是如果忽然關機啥的程序退出,或者有其他程序調用緩存的就可能出錯,所以如果不是必須的話不要直接存入緩存中。還有就是如果數據十分小就幾個字元串或數字啥的我想你也知道應該放到SharedPreferences中。
㈡ 安卓開發Xutils.Bitmap怎麼實現的三級緩存
網路緩存
網路拉取圖片嚴格來講不能稱之為緩存,實質上就是下載url對應的圖片,我們這里姑且把它看作是緩存的一種。仿照BitmapUtil中的display方法,我自己定製的CustomBitmapUtils也定義這個方法,根據傳入的url,將圖片設置到ivPic控制項上。
[java] view plain
public void display(ImageView ivPic, String url) {
}
定義網路緩存的工具類,在訪問網路的時候,我使用了AsyncTask來實現,在AsyncTask的doInBackGround方法里下載圖片,然後將 圖片設置給ivPic控制項,AsyncTask有三個泛型,其中第一個泛型是執行非同步任務的時候,通過execute傳過來的參數,第二個泛型是更新的進度,第三個泛型是非同步任務執行完成之後,返回來的結果,我們這里返回一個Bitmap。具體的下載實現代碼如下:
[java] view plain
<pre name="code" class="java">/**
* 網路緩存的工具類
*
* @author ZHY
*
*/
public class NetCacheUtils {
private LocalCacheUtils localCacheUtils;
private MemoryCacheUtils memoryCacheUtils;
public NetCacheUtils() {
localCacheUtils = new LocalCacheUtils();
memoryCacheUtils = new MemoryCacheUtils();
}
/**
* 從網路下載圖片
*
* @param ivPic
* @param url
*/
public void getBitmapFromNet(ImageView ivPic, String url) {
// 訪問網路的操作一定要在子線程中進行,採用非同步任務實現
MyAsyncTask task = new MyAsyncTask();
task.execute(ivPic, url);
}
/**
* 第一個泛型--非同步任務執行的時候,通過execute傳過來的參數; 第二個泛型--更新進度; 第三個泛型--非同步任務執行以後返回的結果
*
* @author ZHY
*
*/
private class MyAsyncTask extends AsyncTask<Object, Void, Bitmap> {
private ImageView ivPic;
private String url;
// 耗時任務執行之前 --主線程
@Override
protected void onPreExecute() {
super.onPreExecute();
}
// 後台執行的任務
@Override
protected Bitmap doInBackground(Object... params) {
// 執行非同步任務的時候,將URL傳過來
ivPic = (ImageView) params[0];
url = (String) params[1];
Bitmap bitmap = downloadBitmap(url);
// 為了保證ImageView控制項和URL一一對應,給ImageView設定一個標記
ivPic.setTag(url);// 關聯ivPic和URL
return bitmap;
}
// 更新進度 --主線程
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
// 耗時任務執行之後--主線程
@Override
protected void onPostExecute(Bitmap result) {
String mCurrentUrl = (String) ivPic.getTag();
if (url.equals(mCurrentUrl)) {
ivPic.setImageBitmap(result);
System.out.println("從網路獲取圖片");
// 從網路載入完之後,將圖片保存到本地SD卡一份,保存到內存中一份
localCacheUtils.setBitmap2Local(url, result);
// 從網路載入完之後,將圖片保存到本地SD卡一份,保存到內存中一份
memoryCacheUtils.setBitmap2Memory(url, result);
}
}
}
/**
* 下載網路圖片
*
* @param url
* @return
*/
private Bitmap downloadBitmap(String url) {
HttpURLConnection conn = null;
try {
URL mURL = new URL(url);
// 打開HttpURLConnection連接
conn = (HttpURLConnection) mURL.openConnection();
// 設置參數
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
conn.setRequestMethod("GET");
// 開啟連接
conn.connect();
// 獲得響應碼
int code = conn.getResponseCode();
if (code == 200) {
// 相應成功,獲得網路返回來的輸入流
InputStream is = conn.getInputStream();
// 圖片的輸入流獲取成功之後,設置圖片的壓縮參數,將圖片進行壓縮
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;// 將圖片的寬高都壓縮為原來的一半,在開發中此參數需要根據圖片展示的大小來確定,否則可能展示的不正常
options.inPreferredConfig = Bitmap.Config.RGB_565;// 這個壓縮的最小
// Bitmap bitmap = BitmapFactory.decodeStream(is);
Bitmap bitmap = BitmapFactory.decodeStream(is, null, options);// 經過壓縮的圖片
return bitmap;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 斷開連接
conn.disconnect();
}
return null;
}
}
㈢ 安卓手機的軟體緩存是什麼在哪裡
Android開發本質上就是手機和互聯網中的web伺服器之間進行通信,就必然需要從服務端獲取數據,而反復通過網路獲取數據是比較耗時的,特別是訪問比較多的時候,會極大影響了性能,Android中可通過二級緩存來減少頻繁的網路操作,減少流量、提升性能。
1.二級緩存工作機制
所謂二級緩存實際上並不復雜,當Android端需要獲得數據時比如獲取網路中的圖片,我們首先從內存中查找(按鍵查找),內存中沒有的再從磁碟文件或sqlite中去查找,若磁碟中也沒有才通過網路獲取;當獲得來自網路的數據,就以key-value對的方式先緩存到內存(一級緩存),同時緩存到文件或sqlite中(二級緩存)。注意:內存緩存會造成堆內存泄露,所有一級緩存通常要嚴格控制緩存的大小,一般控制在系統內存的1/4。
理解了二級緩存大家可能會有個問題網路中的數據是變化的,數據一旦放入緩存中,再取該數據就是從緩存中獲得,這樣豈不是不能體現數據的變化?我們在緩存數據時會設置有效時間,比如說30分鍾,若超過這個時間數據就失效並釋放空間,然後重新請求網路中的數據。有的童鞋就問30分鍾內咋辦?那好吧,我也沒招了,只有下拉刷新了, 實際上這不是問題。
2.二級緩存的實現
如何實現二級緩存,有很多技術方案,在這里我們使用 ASimpleCache框架來給大家演示一下,通過名字就可以看出它是很容易實現的。
2.1、ACache介紹
ASimpleCache是一個輕量級的開源cache框架,實際上就是一個叫ACache的java類。已經在商業項目中使用,運行效果不錯。
2.2、ACache使用
我們先做一個實現數據緩存的案例,然後再歸納一下主要的方法
編寫NewsListActivity主要代碼如下:
根據不同存入數據,調用不同的方法取數據
㈣ 安卓開發中清理app緩存主要都是清理哪裡
你好,清理一些系統垃圾、卸載殘留等等,可以使用應用寶清理,它能幫你手機加速減少內存佔用率,最大化的釋放更多的手機內存,直接點擊垃圾清理,自動掃描並清理軟體緩存、垃圾文件、多餘裝包、系統緩存,徹底清除軟體卸載後的殘余。
㈤ android文件緩存的方法具體怎麼實現
你好,你想緩存什麼?如果是緩存圖片。。在第一次下載的時候,保存到SD卡,下次下載前從SD讀取同名文件,如果存在就直接從文件讀取,這樣就實現了緩存。謝謝。
㈥ 安卓開發,應用里有些數據做成緩存,一般是怎麼做的。比如我的數據要保留10天左右緩存,一般用什麼做
作為一個完成的應用程序,數據存儲操作是必不可少的。因此,Android系統一共提供了四種數據存儲方式。分別是:SharePreference、SQLite、Content Provider和File。由於Android系統中,數據基本都是私有的的,都是存放於「data/data/程序包名」目錄下,所以要實現數據共享,正確方式是使用Content Provider。
SQLite: SQLite是一個輕量級的資料庫,支持基本SQL語法,是常被採用的一種數據存儲方式。Android為此資料庫提供了一個名為SQLiteDatabase的類,封裝了一些操作資料庫的API。
SharedPreference: 除SQLite資料庫外,另一種常用的數據存儲方式,其本質就是一個xml文件,常用於存儲較簡單的參數設置。
File: 即常說的文件(I/O)存儲方法,常用語存儲大數量的數據,但是缺點是更新數據將是一件困難的事情。
ContentProvider: Android系統中能實現所有應用程序共享的一種數據存儲方式,由於數據通常在各應用間的是互相私密的,所以此存儲方式較少使用,但是其又是必不可少的一種存儲方式。例如音頻,視頻,圖片和通訊錄,一般都可以採用此種方式進行存儲。每個Content Provider都會對外提供一個公共的URI(包裝成Uri對象),如果應用程序有數據需要共享時,就需要使用Content Provider為這些數據定義一個URI,然後其他的應用程序就通過Content Provider傳入這個URI來對數據進行操作。
㈦ 安卓開發怎樣保存緩存文件不大清楚
1、安卓開發保存文件是將寫入文件上,你在sd卡上創建一個文件,寫入其中也是可以的,這樣就可以保存好數據。
2、緩存文件可以用內存來緩存,通過預先消耗應用的一點內存來存儲數據,便可快速的為應用中的組件提供數據。
㈧ 安卓開發 webview為什麼自動緩存
webview 會將我們瀏覽過的網頁url已經網頁文件(css、圖片、js等)保存到資料庫表中
可以設置WebView 緩存模式:
建議緩存策略為,判斷是否有網路,有的話,使用LOAD_DEFAULT,無網路時,使用LOAD_CACHE_ELSE_NETWORK
㈨ android 應用程序開發中,清除緩存的功能怎麼做
android開發文件緩存的默認位置一般是在android/data目錄下,比如kindle(1st)是在/mnt/sdcard/Android/data目錄下,魅族是在/sdcard/Android/data目錄下。
將緩存在應用程序中清除:
打開關閉使用緩存,一共有五個種類
//優先使用緩存:
WebView.getSettings().setCacheMod
(WebSettings.LOAD_CACHE_ELSE_NETWORK);
//不使用緩存:
WebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
在退出應用的時候加上如下代碼
File file = CacheManager.getCacheFileBaseDir();
if (file != null && file.exists() && file.isDirectory()) {
for (File item : file.listFiles()) {
item.delete(); }
file.delete(); }
context.deleteDatabase("WebView.db");
context.deleteDatabase("WebViewCache.db");
以上方法均可實現。
㈩ android開發中怎樣清除本地緩存文件夾
/** * 本應用數據清除管理器 */
public class DataCleanManager {
/** * 清除本應用內部緩存(/data/data/com.xxx.xxx/cache) * * @param context */
public static void cleanInternalCache(Context context) {
deleteFilesByDirectory(context.getCacheDir());
}
/** * 清除本應用所有資料庫(/data/data/com.xxx.xxx/databases) * * @param context */
public static void cleanDatabases(Context context) {
deleteFilesByDirectory(new File("/data/data/com.example.orderfood"));
}
/**
* * 清除本應用SharedPreference(/data/data/com.xxx.xxx/shared_prefs) * * @param
* context
*/
public static void cleanSharedPreference(Context context) {
deleteFilesByDirectory(new File("/data/data/com.example.orderfood/shared_prefs"));
}
/** * 按名字清除本應用資料庫 * * @param context * @param dbName */
public static void cleanDatabaseByName(Context context, String dbName) {
context.deleteDatabase(dbName);
}
/** * 清除/data/data/com.xxx.xxx/files下的內容 * * @param context */
public static void cleanFiles(Context context) {
deleteFilesByDirectory(context.getFilesDir());
}
/**
* * 清除外部cache下的內容(/mnt/sdcard/android/data/com.xxx.xxx/cache) * * @param
* context
*/
public static void cleanExternalCache(Context context) {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
deleteFilesByDirectory(context.getExternalCacheDir());
}
}
/** * 清除自定義路徑下的文件,使用需小心,請不要誤刪。而且只支持目錄下的文件刪除 * * @param filePath */
public static void cleanCustomCache(String filePath) {
deleteFilesByDirectory(new File(filePath));
}
/** * 清除本應用所有的數據 * * @param context * @param filepath */
public static void cleanApplicationData(Context context, String... filepath) {
cleanInternalCache(context);
cleanExternalCache(context);
cleanDatabases(context);
cleanSharedPreference(context);
cleanFiles(context);
for (String filePath : filepath) {
cleanCustomCache(filePath);
}
}
/** * 刪除方法 這里只會刪除某個文件夾下的文件,如果傳入的directory是個文件,將不做處理 * * @param directory */
private static void deleteFilesByDirectory(File directory) {
if (directory != null && directory.exists() && directory.isDirectory()) {
for (File item : directory.listFiles()) {
item.delete();
}
}
}
}