在android中使用缓存和脱机存储

目录
  • 1、在android中使用缓存和脱机存储
  • 2、Offline storage离线存储

1、在android中使用缓存和脱机存储

  缓存可以加速你的应用程序,即使在网络不可用时,用户能够更加流畅地使用你的应用程序使用缓存是相当简单的,需要一个单一的代码行。

导入 import com.shephertz.app42.paas.sdk.android.App42CacheManager即可,同时需要设置缓存策略。

  •  Policy.CACHE_FIRSTSetting 将激活所有数据的读操作首先从缓存中获取,如果缓存中数据可用且没有失效,就直接从缓存返回,否则进行网络请求这个数据,同时将这个数据更新或加入缓存中,你可以通过API设置缓存失效期,缺省是1一个小时。
  • Policy.NETWORK_FIRST 首先从网络获取数据,然后更新缓存。如果网络不可用,数据就从缓存中取出
  • cache.Policy.NOCACHEBy 这是App42 SDK默认,不使用任何缓存,总是仅从网络读数据。

设置缓存策略如下:

App42CacheManager.setPolicy(Policy.CACHE_FIRST);

缓存失效期:

App42CacheManager.setExpiryInMinutes(<EXPIRY_TIME_IN_MINUTES>);

案例代码如下:


              UserService userService = App42API.buildUserService();
              String userName = "Nick";
              userService.getUser(userName,new App42CallBack() {
              public void onSuccess(Object response)
              {
                     User user = (User)response;
                     if(user.isFromCache()){
                            //Response coming from Cache
                            System.out.println("userName is " + user.getUserName());
                            System.out.println("emailId is " + user.getEmail());
                            System.out.println("is from cache is " + user.isFromCache());
                     }
                     else{
                            //Response From Server
                            System.out.println("userName is " + user.getUserName());
                            System.out.println("emailId is " + user.getEmail());
                     }

              }
              public void onException(Exception ex)
              {
                     System.out.println("Exception Message"+ex.getMessage());
              }
              });

If Response is from cache you will get isFromCache flag to true in the response so you can identify that data is real time or data is coming from cache.

如果响应来自缓存,你在响应中通过isFromCache标识为true,这样你能分辨数据是实时的还是来自缓存的。

下面是需要在manifest.xml加入的:


        <receiver android:name="com.shephertz.app42.paas.sdk.android.App42BroadcastReceiver">
      <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
      </intent-filter>
    </receiver>
    <receiver android:name="com.shephertz.app42.paas.sdk.android.AlarmReceiver"/>
    <service android:name="com.shephertz.app42.paas.sdk.android.App42DataSyncService"/>

2、Offline storage离线存储

  离线存储允许你在本地网络的情况下不可用提交数据,当网络可用时,服务器会同步。这在许多情况下是非常有用的,例如如果你的用户玩游戏,并取得了一些特定级别的完成。然而,在发送成绩时,网络断了,那么他的得分可能会丢失,使用脱机缓存会在本地网络无法获得情况下,保存他的得分,并将于稍后网络恢复可用时与同步服务器的。

使用脱机:

App42API.setofflineStorage(true);

案例代码:

//Set Offline Storage to True
App42API.setofflineStorage(true);
String gameName = "<Enter_your_game/level_name>";
String userName = "Nick";
BigDecimal gameScore = new BigDecimal(3500);
scoreBoardService.saveUserScore(gameName, userName, gameScore,new App42CallBack() {
public void onSuccess(Object response)
{
       Game game = (Game)response;
       if(game.isOfflineSync())
       {     //Request is saved in cache
              System.out.println("Information is Stored in cache, will send to App42 when network is available");
       }
       else {
              //Response Received From Server and is Succeseful
              System.out.println("Server Response : " + game);
       }
}
public void onException(Exception ex)
{
       System.out.println("Exception Message"+ex.getMessage());
}
});
(0)

相关推荐

  • Android清除应用缓存的两种方法

    第一种 使用ActivityManager中的clearApplicationUserData方法,代码如下: ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); am.clearApplicationUserData(); 这种方式的问题就是不知清除cache,连带应用的data也删除了.如下图所示: 第二种 使用PackageManager中的deleteApplicationC

  • android H5本地缓存加载优化的实战

    2020年最后一周,正准备摸摸鱼回家过年,须不知"惊天阴谋"已在领导层酝酿.竖日,组长带着诡异的微笑向我走来: 组长: "快过年了,你回家路途遥远,要不要请两天假?" 我: "组长,你真是我的知己,想我所想,思我所思,你这么一说我就不客气了,那我就请两天" 组长:"行,请假肯定没问题,我一向很照顾兄弟们!!"(那一刻,一股暖流心中而过,早已将这一年他对我的"压榨"抛之脑后) "不过我还有个事跟你说

  • 使用SharedPreferences在Android存储对象详细代码

    为什么不用SQLite? 原因多种:除了面向对象和关系数据库之间的阻抗不匹配时,SQLite可能是矫枉过正(带来了更多的开销)对于一些简单的用例,或者其用法和语句可能会完全不喜欢.其他Android ORM 框架(ORMLite, greenDAO, Sugar ORM, ActiveAndroid, 等)或NOSQL移动数据库,如Couchbase精简版(Beta版在此时间). Couchbase精简版基本上是一个JSON数据库,它们旨在降低复杂性,但是同时又违背了抽象漏洞定律(所有不证自明的

  • Android 文件存储与SharedPreferences存储方式详解用法

    目录 持久化技术简介 文件存储 1. 将数据存储到文件中 2. 从文件中读取数据 SharedPreferences 存储 1. 将数据存储到 SharedPreferences 中 2. 从 SharedPreferences 中读取数据 持久化技术简介 数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或计算机关机的情况下,这些数据也不会丢失.保存在内存中的数据是处于瞬时状态的,而保存在存储设备的数据是处于持久状态的.持久化技术提供了一种机制,可以让数据在瞬时状态和持久状

  • 详解Android ViewPager2中的缓存和复用机制

    目录 1. 前言 2. 回顾RecyclerView缓存机制 3. offscreenPageLimit原理 4. FragmentStateAdapter原理以及缓存机制 4.1 简单使用 4.2 原理 5. 案例讲解回收机制 5.1 默认情况 5.2 offscreenPageLimit=1 总结 1. 前言 众所周知ViewPager2是ViewPager的替代版本.它解决了ViewPager的一些痛点,包括支持right-to-left布局,支持垂直方向滑动,支持可修改的Fragment

  • Android实现缓存大图到SD卡

    本文实例为大家分享了Android实现缓存大图到SD卡的具体代码,供大家参考,具体内容如下 该功能主要针对资源图片过大占用apk体积,所以先将图片事先下载,在通过Glide加载时先去本地取,取值成功时直接应用且节省了时间,若本地图片不存在或取值失败等,在通过网络加载... 1.开启子线程 2.通过图片url进行本地缓存 3.判断SD是否挂载 4.判断本地是否存在该文件 5.存在将文件放到指定路径下 public void downloadOnly(@Nullable final List<Str

  • 关于Android的 DiskLruCache磁盘缓存机制原理

    目录 一.为什么用DiskLruCache 1.LruCache和DiskLruCache 2.为何使用DiskLruCache 二.DiskLruCache使用 1.添加依赖 2.创建DiskLruCache对象 3.添加 / 获取 缓存(一对一) 4.添加 / 获取 缓存(一对多) 三.源码分析 1.open() 2.rebuildJournal() 3.readJournal() 4.get() 5.validateKey 6.trimTOSize() 7.journalRebuildRe

  • 在android中使用缓存和脱机存储

    目录 1.在android中使用缓存和脱机存储 2.Offline storage离线存储 1.在android中使用缓存和脱机存储 缓存可以加速你的应用程序,即使在网络不可用时,用户能够更加流畅地使用你的应用程序使用缓存是相当简单的,需要一个单一的代码行. 导入 import com.shephertz.app42.paas.sdk.android.App42CacheManager即可,同时需要设置缓存策略.  Policy.CACHE_FIRSTSetting 将激活所有数据的读操作首先从

  • android中使用SharedPreferences进行数据存储的操作方法

    很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果是 j2se应用,我们会采用properties属性文件或者xml进行保存.如果是Android应用,我们最适合采用什么方式保存软件配置参数呢?Android 平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数.使用 SharedPrefe

  • Android图片三级缓存策略(网络、本地、内存缓存)

    一.简介 现在的Android应用程序中,不可避免的都会使用到图片,如果每次加载图片的时候都要从网络重新拉取,这样不但很耗费用户的流量,而且图片加载的也会很慢,用户体验很不好.所以一个应用的图片缓存策略是很重要的.通常情况下,Android应用程序中图片的缓存策略采用"内存-本地-网络"三级缓存策略,首先应用程序访问网络拉取图片,分别将加载的图片保存在本地SD卡中和内存中,当程序再一次需要加载图片的时候,先判断内存中是否有缓存,有则直接从内存中拉取,否则查看本地SD卡中是否有缓存,SD

  • 浅谈Android LruCache的缓存策略

    一.Android中的缓存策略 一般来说,缓存策略主要包含缓存的添加.获取和删除这三类操作.如何添加和获取缓存这个比较好理解,那么为什么还要删除缓存呢?这是因为不管是内存缓存还是硬盘缓存,它们的缓存大小都是有限的.当缓存满了之后,再想其添加缓存,这个时候就需要删除一些旧的缓存并添加新的缓存. 因此LRU(Least Recently Used)缓存算法便应运而生,LRU是近期最少使用的算法,它的核心思想是当缓存满时,会优先淘汰那些近期最少使用的缓存对象.采用LRU算法的缓存有两种:LrhCach

  • Android中Image的简单实例详解

    在多媒体应用中,Image是最基础的功能模块,接下来我们将看看在Android中是如何获取和存储Image的.Android内嵌的Image获取和存储功能,可以让我们对于整个媒体框架有个比较全面的了解,同时为audio和video的学习打下基础. 一.Image的获取可以通过调Android自带的Camera应用来完成.该应用含有一个Intent-Filter.通过使用 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE):sta

  • Android中Glide加载库的图片缓存配置究极指南

    零.选择Glide 为什么图片加载我首先推荐Glide? 图片加载框架用了不少,从afinal框架的afinalBitmap,Xutils的BitmapUtils,老牌框架universalImageLoader,著名开源组织square的picasso,google推荐的glide到FaceBook推出的fresco.这些我前前后后都体验过,那么面对这么多的框架,该如何选择呢?下面简单分析下我的看法. afinal和Xuils在github上作者已经停止维护了,开源社区最新的框架要属KJFra

  • Android中使用二级缓存、异步加载批量加载图片完整案例

    一.问题描述 Android应用中经常涉及从网络中加载大量图片,为提升加载速度和效率,减少网络流量都会采用二级缓存和异步加载机制,所谓二级缓存就是通过先从内存中获取.再从文件中获取,最后才会访问网络.内存缓存(一级)本质上是Map集合以key-value对的方式存储图片的url和Bitmap信息,由于内存缓存会造成堆内存泄露, 管理相对复杂一些,可采用第三方组件,对于有经验的可自己编写组件,而文件缓存比较简单通常自己封装一下即可.下面就通过案例看如何实现网络图片加载的优化. 二.案例介绍 案例新

  • Android中巧妙的实现缓存详解

    前言 缓存有很多的实现方式,技巧性还有坑都很多,今天我给大家介绍一些非通用的方法,可以巧妙地帮大家简单实现一些内存缓存. Supplier和Memoize SQLite是Android里常用的一种数据存储方式,在访问数据库数据时需要通过SQLiteOpenHelper. 一份好的数据库连接代码应该能解决以下几个问题: a) 构建实例比较费资源 b) 数据库连接最好能复用 c) onUpdate等方法在执行时不能和其他实例构成冲突. 这里可以很简单的这样写 Suppliers.memoize(ne

  • Android中图片的三级缓存机制

    我们不能每次加载图片的时候都让用户从网络上下载,这样不仅浪费流量又会影响用户体验,所以Android中引入了图片的缓存这一操作机制. 原理: 首先根据图片的网络地址在网络上下载图片,将图片先缓存到内存缓存中,缓存到强引用中 也就是LruCache中.如果强引用中空间不足,就会将较早存储的图片对象驱逐到软引用(softReference)中存储,然后将图片缓存到文件(内部存储外部存储)中:读取图片的时候,先读取内存缓存,判断强引用中是否存在图片,如果强引用中存在,则直接读取,如果强引用中不存在,则

  • 获取Android应用专属缓存存储目录的实例

    如果你想摆脱缓存目录使用的尴尬:找不到目录?忘记申请读写权限?害怕污染用户存储空间?--请往下看 SD卡缓存目录 当应用需要将图片或者文件缓存到SD卡中时要去申请创建目录,有下面几种途径 我们可以通过API调用应用专属目录: // /storage/emulated/0/Android/data/app_package_name/files/Pictures Content.getExternalFilesDir(Environment.DIRECTORY_PICTURES); // /stor

随机推荐