当前位置:首页 » 文件管理 » 安卓开发缓存

安卓开发缓存

发布时间: 2022-07-16 07:13:45

㈠ 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();

}

}

}

}

热点内容
sql数据库的端口 发布:2025-01-22 12:20:02 浏览:362
安卓最终幻想8怎么设置中文 发布:2025-01-22 12:19:23 浏览:651
怎么查电脑配置和网络 发布:2025-01-22 12:19:16 浏览:586
linuxsnmp查看 发布:2025-01-22 12:17:49 浏览:37
安卓数据线怎么接蓝牙 发布:2025-01-22 12:07:29 浏览:229
扣扣账号多少次密码不正确会被封 发布:2025-01-22 12:07:19 浏览:400
python是32位还是64位 发布:2025-01-22 11:51:41 浏览:894
铃声多多缓存文件夹 发布:2025-01-22 11:51:39 浏览:724
java按键精灵 发布:2025-01-22 11:49:31 浏览:81
python配色 发布:2025-01-22 11:46:40 浏览:613