导航:首页 > 操作系统 > android本地数据缓存

android本地数据缓存

发布时间:2023-01-17 02:40:09

1. android webview 怎么使用本地缓存

android
webview使用本地缓存的话,思路如下:
定义一个离线下载的服务Service
启动后台服务Service来执行异步下载
存储到本地数据库中
每一次加载url之前,先判断数据库是否存在缓存内容
5.如果存在缓存,优先加载本地缓存,如果不存在,才执行联网请求

2. 请教贴android本地缓存机制

Android中提供的缓存机制是利用本地存储实现的。
(1)新下载数据的时候,将数据缓存到本地。
(2)再次下载之前,先判定该资源是否已经被缓存,如果是,则优先使用本地资源;如果没有被缓存,则凑个网络上下载资源,并进行缓存。
实际上使用缓存机制的时候,还要考虑到额外的两个条件:空间和时间。
对于存储空间的条件限制,处理方法一般是结合应用下载量大小和用户选择来确定,比如以缓存文本为主的应用,由于文本本身占用极小的空间,其缓存大小可以根据用户的磁盘空间大小来确定;以缓存图片为主应用,由于图片占用空间较大,更加需要用户参与指定空间大小。
对于时间的限制,可以通过设定缓存的过期时间来实现,为下载到缓存的数据设定时间戳,在读取该缓存的时候,比较时间戳,超过时间限制的则需要更新该缓存。
在清空应用缓存的时候也需要谨慎,在存储空间已满,用户注销的时候可以考虑清空该用户的整个缓存,而在普通升级应用的情况下并不需要清空整个缓存。

3. android开发中怎样清除本地缓存文件夹

java">

/** * 本应用数据清除管理器 */

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

}

}

}

}

4. 如何Android数据库缓存进行管理

无论大型或小型应用,灵活的缓存可以说不仅大大减轻了服务器的压力,而且因为更快速的用户体验而方便了用户。
Android的apk可以说是作为小型应用,其中99%的应用并不是需要实时更新的,而且诟病于蜗牛般的移动网速,与服务器的数据交互是能少则少,这样用户体验才更好,这也是我们有时舍弃webview而采用json传输数据的原因之一。
采用缓存,可以进一步大大缓解数据交互的压力,特此,我们简略列举一下缓存管理的适用环境:
1. 提供网络服务的应用
2. 数据更新不需要实时更新,但是哪怕是3-5分钟的延迟也是可以采用缓存机制。
3. 缓存的过期时间是可以接受的(不会因为缓存带来的好处,导致某些数据因为更新不及时而影响产品的形象等)
带来的好处:
1. 服务器的压力大大减小
2. 客户端的响应速度大大变快(用户体验)
3. 客户端的数据加载出错情况大大较少,大大提高了应有的稳定性(用户体验)
4. 一定程度上可以支持离线浏览(或者说为离线浏览提供了技术支持)
一、缓存管理的方法
这里的缓存管理的原理很简:通过时间的设置来判断是否读取缓存还是重新下载。
里面会有一些细节的处理,后面会详细阐述。
基于这个原理,目前鄙人见过的两种比较常见的缓存管理方法是:数据库法和文件法。
二、数据库法缓存管理
这种方法是在下载完数据文件后,把文件的相关信息如url,路经,下载时间,过期时间等存放到数据库,下次下载的时候根据url先从数据库中查询,如果查询到当前时间并未过期,就根据路径读取本地文件,从而实现缓存的效果。
从实现上我们可以看到这种方法可以灵活存放文件的属性,进而提供了很大的扩展性,可以为其它的功能提供一定的支持;
从操作上需要创建数据库,每次查询数据库,如果过期还需要更新数据库,清理缓存的时候还需要删除数据库数据,稍显麻烦,而数据库操作不当又容易出现一系列的性能,ANR问题,实现的时候要谨慎,具体作的话,但也只是增加一个工具类或方法的事情。
还有一个问题,缓存的数据库是存放在/data/data/<package>/databases/目录下,是占用内存空间的,如果缓存累计,容易浪费内存,需要及时清理缓存。
当然这种方法从目前一些应用的实用上看,我没有发现什么问题。
本文我侧重强调第二种方法,第一种方法的实现,就此掠过。
三、文件法缓存管理
这种方法,使用File.lastModified()方法得到文件的最后修改时间,与当前时间判断是否过期,从而实现缓存效果。
实现上只能使用这一个属性,没有为其它的功能提供技术支持的可能。
操作上倒是简单,比较时间即可。本身处理也不容易带来其它问题,代价低廉。
四、文件法缓存管理的两点说明
1. 不同类型的文件的缓存时间不一样。
笼统的说,不变文件的缓存时间是永久,变化文件的缓存时间是最大忍受不变时间。
说白点,图片文件内容是不变的,直到清理,我们是可以永远读取缓存的。
配置文件内容是可能更新的,需要设置一个可接受的缓存时间。
2. 不同环境下的缓存时间标准不一样。
无网络环境下,我们只能读取缓存文件,哪怕缓存早就过期。
WiFi网络环境下,缓存时间可以设置短一点,一是网速较快,而是流量不要钱。
移动数据流量环境下,缓存时间可以设置长一点,节省流量,就是节省金钱,而且用户体验也更好。
举个例子吧,最近本人在做的一个应用在wifi环境下的缓存时间设置为5分钟,移动数据流量下的缓存时间设置为1小时。
这个时间根据自己的实际情况来设置:数据的更新频率,数据的重要性等。
五、何时刷新
开发者一方面希望尽量读取缓存,用户一方面希望实时刷新,但是成都网站制作响应速度越快越好,流量消耗越少越好,是一个矛盾。
其实何时刷新我也不知道,这里我提供两点建议:
1. 数据的最长多长时间不变,对应用无大的影响。
比如,你的数据更新时间为1天,则缓存时间设置为4~8小时比较合适,一天他总会看到更新,如果你觉得你是资讯类应用,再减少,2~4小时,如果你觉得数据比较重要或者比较受欢迎,用户会经常把玩,再减少,1~2小时,依次类推。
为了保险起见,你可能需要毫无理由的再次缩减一下。
2. 提供刷新按钮。
上面说的保险起见不一定保险,最保险的方法使在相关界面提供一个刷新按钮,为缓存,为加载失败提供一次重新来过的机会,有了这个刷新按钮,我们的心也才真的放下来。

5. android缓存数据到本地放在哪儿最好

Android应用开发中,给我们提供了5种数据的存储方式
1 使用SharedPreferences存储数 据
2 文件存储数据
3 SQLite数据库存储数据
4 使用ContentProvider存储数据
5 网络存储数据

以下是这几中数据存储方式的说明用及法:

第一种: 使用SharedPreferences存储数据
SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,一般在Activity中 重载窗口状态onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平台常规的Long长 整形、Int整形、String字符串型的保存。

第二种: 文件存储数据
关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。
文件可用来存放大量数据,如文本、图片、音频等。
默认位置:/data/data/< >/files/***.***。

第三种: SQLite数据库存储数据
SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,
并且只利用很少的内存就有很好的性能。
此外它还是开源的,任何人都可以使用它。
许多开源项目((Mozilla, PHP, Python)都使用了 SQLite
SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。
SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。

第四种 使用ContentProvider存储数据 ContentProvider其实也是通过数据库的方式来存储数据的,因此这里不再做详细介绍

第五种 网络存储数据 也就是说将数据保存在服务器,android上只需要通过httpclient发起一个请求,向服务器获取数据即可
应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。

大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。
这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。
如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢?

通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据

如果使用上面的方法,当应用在被用户卸载后,SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。

6. android缓存数据到本地放在哪儿最好

之前一直不知道 sdcard/Android目录什么作用,我做的项目里面缓存数据到本地一般都是在sdcard上面建一个文件,然后把数据放在这个文件夹下面的子文件夹下。下面介绍一种更好的解决方法。

应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。

大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。
这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。
如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢?

通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据
通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据

如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。

而且上面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项
转载

7. android怎么实现数据缓存

二级缓存工作机制
所谓二级缓存实际上并不复杂,当Android端需要获得数据时比如获取网络中的图片,我们首先从内存中查找(按键查找),内存中没有的再从磁盘文件或sqlite中去查找,若磁盘中也没有才通过网络获取;当获得来自网络的数据,就以key-value对的方式先缓存到内存(一级缓存),同时缓存到文件或sqlite中(二级缓存)。注意:内存缓存会造成堆内存泄露,所有一级缓存通常要严格控制缓存的大小,一般控制在系统内存的1/4。
理解了二级缓存大家可能会有个问题网络中的数据是变化的,数据一旦放入缓存中,再取该数据就是从缓存中获得,这样岂不是不能体现数据的变化?我们在缓存数据时会设置有效时间,比如说30分钟,若超过这个时间数据就失效并释放空间,然后重新请求网络中的数据。有的童鞋就问30分钟内咋办?那好吧,我也没招了,只有下拉刷新了, 实际上这不是问题。
二级缓存的实现
如何实现二级缓存,有很多技术方案,在这里我们使用 ASimpleCache框架来给大家演示一下,通过名字就可以看出它是很容易实现的。

1、ACache介绍
ASimpleCache是一个轻量级的开源cache框架,实际上就是一个叫ACache的java类。已经在商业项目中使用,运行效果不错。

2、ACache使用
我们先做一个实现数据缓存的案例,然后再归纳一下主要的方法
编写NewsListActivity主要代码如下:

创建ACache组件
ACache acache=ACache.get(context)

ACache acache=ACache.get(context,max_size,max_count)

参数说明:
max_size:设置限制缓存大小,默认为50M
max_count:设置缓存数据的数量,默认不限制
设置缓存数据
acache.put(key,data,time)或acache.put(key,data)
将数据同时上存入一级缓存(内存Map)和二级缓存(文件)中
参数说明:
Key:为存入缓存的数据设置唯一标识,取数据时就根据key来获得的
Data:要存入的数据,acache支持的数据类型如图所示:
有String、可序列化的对象、字节数组、Drawable等Time:设置缓存数据的有效时间,单位秒

从缓存中取数据
提供一系列getAsXXX()方法,如图所示。
根据不同存入数据,调用不同的方法取数据

8. 如何为Android缓存数据到本地

缓存数据到本地有三种方式:
1:通过文件File方式;
2:通过SQLite数据库的方式;
3:通过shareprefences

阅读全文

与android本地数据缓存相关的资料

热点内容
安卓快手下载怎么没有下载到本地 浏览:228
怎么在安卓手机登绘旅人 浏览:404
桌面文件全部加密 浏览:401
6s怎么外接u盘需要什么app 浏览:131
linux查看文件权限命令 浏览:685
安卓手游存档怎么用 浏览:761
linuxyum安装ftp 浏览:690
村委会主任可以推行政命令吗 浏览:102
电脑文件夹封面多张图片 浏览:263
网吧总服务器叫什么 浏览:922
多个算法解决同一个问题 浏览:455
小车解压后我的购车发票呢 浏览:977
做app开发用什么云服务器 浏览:177
linux网卡子接口 浏览:985
21岁职高毕业学程序员怎么学 浏览:321
vs如何对单个文件编译 浏览:6
为什么有的电脑不能安装python 浏览:75
金蝶迷你版加密狗检测到过期 浏览:186
硬件描述语言编译结果 浏览:655
程序员逆天改命 浏览:19