Android_数据的三级缓存

Android中Rxjava实现三级缓存的两种方式 本文正如标题所说的用rxjava实现数据的三级缓存分别为内存,磁盘,网络,刚好最近在看Android源码设计模式解析与实战(受里面的ImageLoader的设计启发)。 我把代码放到了我的hot项目中,github地址 源码下载地址:Rxjava_jb51.rar 1.使用concat()和first()的操作符。 2.使用BehaviorSubject。 先说BehaviorSubject的实现方法,废话不多说直接上代码, /** * Created by wukewei on 16/6/20. */ public class BehaviorSubjectFragment 立即下载

数据的三级缓存分为     内存缓存  磁盘缓存   网络缓存


public class BaseApplication extends Application {
    private static BaseApplication instance;
    private List<Category> list;
    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }


    public static BaseApplication getInstance() {
        return instance;
    }


    public List<Category> getData() {
        if (list == null) {
            list = new ArrayList<>();
        }
        return list;
    }

    public void setData(List<Category> list) {
        this.list = list;
    }


}

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

    @BindView(R.id.lv_data)
    ListView lvData;
    private List<Category> datas;

    private DataAdapter adapter;

    private String url = "https://www.zhaoapi.cn/product/getCatagory";
    private CategoryDao dao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        dao = DBUtils.getInstance(this).getDao();

        // 首先从内存中有没有数据
        datas = BaseApplication.getInstance().getData();
        adapter = new DataAdapter(this, datas);
        lvData.setAdapter(adapter);

        if (datas == null || datas.size() == 0) {
            Log.i(TAG, "内存中无数据");
            // 从数据库中取
            List<Category> list = getDataFromDB();
            // 数据库中也是空的
            if (list == null || list.size() == 0) {
                Log.i(TAG, "数据库中为空");
                // 从网络中取数据
                getDataFromNet();
            } else {
                Log.i(TAG, "数据库中不为空");
                // 数据库中有数据的时候
                putDataToMemory(list);
            }
        }
    }

    /**
     * 从网络中取数据
     */
    private void getDataFromNet() {
        Log.i(TAG, "从网络中取");
        HttpUtils.getInstance().get(url, new CallBack() {
            @Override
            public void onSuccess(Object o) {
                MessageBean bean = (MessageBean) o;
                if (bean != null) {
                    List<Category> data = bean.getData();
                    if (data != null) {
                        Log.i(TAG, "onSuccess: 网络不为空");
                        // 将网络请求的数据存到内存和数据库中
                        putDataToMemory(data);
                        // 蒋数据添加到数据库中
                        for (Category category : data) {
                            dao.insertOrReplace(category);
                        }

                    }
                }
            }

            @Override
            public void onFailed(Exception e) {

            }
        }, MessageBean.class);
    }

    /**
     * 蒋数据添加到内存中
     *
     * @param data
     */
    private void putDataToMemory(List<Category> data) {
        Log.i(TAG, "向内存中存数据");
        datas.clear();
        // 将数据添加到内存中
        datas.addAll(data);
        adapter.notifyDataSetChanged();
        BaseApplication.getInstance().setData(datas);
    }

    /**
     * 从数据库中取数据
     *
     * @return
     */
    private List<Category> getDataFromDB() {
        Log.i(TAG, "从数据库中取");
        // select * from category where 1=1
//        List<Category> categories = dao.queryRaw("where _id=?", "1");
        // 查询所有数据
        List<Category> categories = dao.loadAll();
        if (categories == null || categories.size() == 0) {
            Log.i(TAG, "getDataFromDB: null");
        } else {
            Log.i(TAG, "getDataFromDB: " + categories.size());
        }
        return categories;
    }
}




AI工程化之生成式UI & A2UI(一) 本文系统介绍了生成式UI和Google A2UI技术。生成式UI通过AI直接生成前端代码(完全生成式)或DSL(混合式),实现千人千面的动态界面和研发提效。Google A2UI提出组件级和消息级协议,采用JSON规范实现渲染框架解耦,支持多端渲染。文章详细阐述了A2UI的架构设计,包括协议生成、服务端处理和渲染器实现,并对比了与传统前端框架的差异,指出A2UI本质是UI=F(AI(UI)+AI(state))的创新模式。最后通过playground项目展示了A2UI的实践应用。 阅读详情

相关推荐

vscode中使用PlatformIO创建工程加载慢

解决使用VSCODE+PlatformIO中,第一次新建工程一直加载的问题

Reasally的博客 4973

android数据缓存

好多同学做项目时会遇到网络加载数据、图片等情况,还有面试时好多面试者都被提问用过缓存吗?你们是怎么实现缓存的,用的是硬件缓存还是内存缓存等等 balabala.... 对于初学者来说听着好高大上,但是在实际项目中的应用呢有没有这么复杂呢?下面我总结了一下好多网友的blog,摘出了我认为对我比较有用的东西和大家分享一下。文章最下面有参考blog地址,尊重原创  :-) 正文开始开始啦 第一点先

这是一重要的件事 6445

【虚幻引擎UE】UE5 四步骤实现AI漫游与对话行为(含工程源码)

【虚幻引擎UE】UE5 四步骤实现AI漫游与对话行为(含工程源码)

灵境引路人 3227

数据库一二三级缓存以及CPU一二三级缓存

是指与数据库的会话绑定的缓存,通过链接数据库查询到的结果将被缓存下载,如果再次查询相同的数据则会直接从缓存中获取返回。如果在一次会话中对数据执行了更新操作,那么将会自动清除缓存保持数据一致性。二级缓存指的是基于整个应用的缓存,会跨多个会话。当多个会话建立并访问同样的数据时会直接从缓存中返回减少与数据库的交互。但由于是跨多个会话的缓存,任意一个会话中如果对数据做了更新,那么必须清除所有会话的缓存来保持一致性。

weixin_44131922的博客 1103

YOLO26 实战全流程:从数据集标注到端到端无NMS推理(完整版,附ProgLoss核心调参技巧+避坑指南)

本章节是实战经验的精华❌ 数据集标注不规范,导致模型精度低 → ✅ 严格遵守工业级标注规范,标注框紧贴目标边缘,不要漏标/多标;❌ 训练时未使用预训练权重,导致收敛极慢 → ✅ 必须开启,预训练权重能让模型快速收敛;❌ ProgLoss参数调整幅度过大,导致训练崩溃 → ✅ 每次只调整一个参数,幅度±0.02即可,循序渐进;❌ 推理时强行添加NMS参数,画蛇添足 → ✅ YOLO26无需NMS,推理命令中不要加conf/iou参数,否则会降低推理速度;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1141

Android PMS——概述(一)

PMS(Package Manager Service)是 Android 操作系统的一个重要组件,它负责管理应用程序的包信息以及与应用程序的安装、卸载、权限控制等相关功能,确保应用程序的安全性和稳定性。 Android PMS 负责维护一个应用程序包的清单信息,该清单是一个 XML 文件,包含应用程序的各种元数据,例如应用程序的包名、版本号、权限要求、组件信息等。PMS通过访问该清单文件来获取应用程序的信息。 此外,Android PMS 还负责应用程序的安装和卸载。在安装应用

小旭的专栏 1664

三级缓存(不是CPU的概念,而是一种技术上逻辑容错处理方案)

三级缓存(不是CPU的概念,而是一种技术上逻辑容错处理方案) 相信硬件出生的同学,对这个一眼就认为是CPU的三级缓存。 百科上解释的三级缓存 三级缓存是为读取二级缓存后未命中的数据设计的—种缓存,在拥有三级缓存的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。其运作原理在于使用较快速的储存装置保留一份从慢速储存装置中所读取数据且进行拷贝,当有需要再从较慢的储存体中读写数据时,缓存(cache)能够使得读写的动作先在快速的装置上完成,如此会使系统的响应较为快速。 它这个三.

第二颗大白菜 3877

[案例四] 智能填写属性工具(支持装配组件还有建模实体属性的批量创建、编辑)

本次案例主要是对上次导出自动导出BOM的一个前处理,要想导出属性,首先的有属性。于是本着学习的态度进行制作,可能有些功能有点别扭(支持装配环境下组件属性的批量填写,支持建模环境下的实体(不包括装配组件实体)——为了减负我把其过滤掉了,一般没人会往装配体里添加进行建模吧,但是不免有奇葩,哈哈哈)。

weixin_47753171的博客 1980

详解Android数据存储技术

前言 学习Android相关知识,数据存储是其中的重点之一,如果不了解数据,那么让你跟一款没有数据的应用玩,你能玩多久呢?答案是这和没有手机几乎是差不多的。我们聊QQ,聊微信,看新闻,刷朋友圈等都是看里面的数据,所以在Android中数据对我们是多么重要。 数据,如今是数据大时代,谁拥有数据,谁就能掌握未来,这一点很可怕的,现在你用的手机APP中存在着你的大量数据信息,大数据的积累可以...

程序员哆啦A梦,蓝胖子 667

【WRF-Urban】使用 LCZ 替换 WRF 运行中的 LUCC 数据

使用 LCZ 替换 WRF 运行中的 LUCC 数据

WW、forever的博客 988

AutoSAR系列讲解(实践篇)9.5-通信的数据映射

讲解了AppL中的数据与通信中的Signal的一个映射操作

雪云飞星的博客 1万+

android缓存数据库方案,Android本地数据存储方案(一)

Android系列的博客主要是记录和总结自己在平时学习之中遇到的问题,方便日后用到时查看,同时也希望对读者有所帮助。不足之处,欢迎指正~在说到Android数据存储之前,先提一下数据持久化,所谓数据持久化就是将内存中的瞬时数据保存下来,在应用开发中是很重要的部分。举个栗子,我们打开一个应用之后输入了用户名和密码,之后回到了桌面,再回到应用时,我们希望之前输入的内容还在,这个要怎么实现呢?可以在回到...

weixin_39846364的博客 1617

基于51单片机设计的花样流水灯设计

花样流水灯是一种常见的LED灯效果,通常由多个LED灯组成,通过控制每个LED灯的亮灭顺序和时间,实现花样流水灯的效果。在51单片机中,可以使用定时器和端口控制来实现这一效果。

3430

android studio 网络获取数据,三级缓存框架

android studio 网络获取数据,三级缓存框架 为什么要三级缓存 有时候Android应用中要获取比较大的数据,比如说图片流,短视频流等,如果每次都从网络上去请求,那么响应速度很慢的,用户体验不好。 二级缓存(多了个数据库) 如果把服务器拉下来的数据保存在本地数据库中,在服务器数据并没有发生改变的时候,直接从本地中获取数据,这就是Android中的二级缓存,比直接每次从服务器中拉取数据多了本地的存储。二级缓存原理如下图: 由上图可知,在二级缓存中,Android中的activity请求数据时,都

weixin_44911775的博客 871

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

android studio 网络获取数据_【面试必备】Android中的三级缓存框架

秦子帅明确目标,每天进步一点点.....作者| Hanking地址|juejin.im/post/5c2b85db6fb9a049f7464bf1前言2019年过去了,很久之前就希望自己可以潜心研究源码,研究技术,但是空闲时间不是看电影,就是玩游戏都没有认真看技术方面的东西感觉很内疚,今年一定要好好的研究端正态度,认真学习技术。为什么要三级缓存有时候Android应用中要获取比...

weixin_35666711的博客 282

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

RxJava2-Android-Samples数据缓存策略:内存、磁盘、网络三级缓存实现指南

在现代Android应用开发中,**数据缓存策略**是提升用户体验和性能的关键因素。RxJava2-Android-Samples项目提供了一个完整的**三级缓存实现方案**,通过RxJava的强大操作符组合,优雅地解决了数据获取的优先级问题。 ## 三级缓存架构解析 🏗️ RxJava2-Android-Samples项目构建了一个**内存-磁盘-网络**的三级缓存架构,每一级都有其独特的

gitblog_00714的博客 672

Android的数据存储方式,如数据库的基本操作和三级缓存实现-->

------------------------------数据存储方式----------------------------- 1使用SharedPreferences存储数据;   void ReadSharedPreferences(){     String strName,strPassword;     SharedPreferences user = g...

bangmian3968的博客 360

SharedPreferences存储和SD卡存储以及三级缓存操作

安卓中SharedPreferences存储和SD卡存储以及三级缓存操作SharedPreferences存储SD卡存储 三级缓存的原理先从内存中找数据没有去SD卡中寻找如果再没有就去网上下载。 SharedPreferences存储 SharedPreferences存储简称sp存储是一种保存少量与简单数据且只能存储5种原始数据类型: boolean, float, int, long, S...

SageDeceiveFiend的博客 460

Android_简单三级缓存 (数据库)

//GreenDao的依赖 // In your root build.gradle file: buildscript { repositories { jcenter() mavenCentral() // add repository } dependencies { classpath 'com.android.to

Rbh73692的博客 605

(安卓) 三级缓存具体逻辑(内存,磁盘{数据库},网络)

三级缓存的主要概念就是: 思想:                 1.从网络上获取数据,效率比较低,速度较慢,而且需要联网 2.为了更高的提高读取已经从网络上获取过的数据,并且在没联网的情况下也可以浏览,在第一次从网络上获取数据的时候将数据存储到缓存文件中 3.为了提高读取效率,直接从内存中读取是最快的,可以将获取的数据保存到内存中(LruCache),在内存足够的情况下,系统直

下午茶的博客 510

android中的三级缓存,自己动手实现Android中的三级缓存框架

前言2018年过去了,很久之前就希望自己可以潜心研究源码,研究技术,但是空闲时间不是看电影,就是玩游戏都没有认真看技术方面的东西感觉很内疚,2019年一定要好好的研究端正态度,认真学习技术。为什么要三级缓存有时候Android应用中要获取比较大的数据,比如说图片流,短视频流等,如果每次都从网络上去请求,那么响应速度很慢的,用户体验不好。 二级缓存 如果把服务器拉下来的数据保存在本地数据库中,在服务...

weixin_34279705的博客 469

android三级缓存封装,自己动手实现Android中的三级缓存框架

前言2018年过去了,很久之前就希望自己可以潜心研究源码,研究技术,但是空闲时间不是看电影,就是玩游戏都没有认真看技术方面的东西感觉很内疚,2019年一定要好好的研究端正态度,认真学习技术。为什么要三级缓存有时候Android应用中要获取比较大的数据,比如说图片流,短视频流等,如果每次都从网络上去请求,那么响应速度很慢的,用户体验不好。二级缓存如果把服务器拉下来的数据保存在本地数据库中,在服务器数...

weixin_34746924的博客 467

三级缓存的理解

三级缓存的理解

beiback的博客 4101

Android --- 简单实现三级缓存

三级缓存:    1、网络缓存 从网络获取资源(异步加载)     2、本地缓存 从本地获取数据(File存储)     3、内存缓存 从内存获取数据(LruCache)1、内存缓存:LruCache  主要是用到了LruCache这个类,这个类比较适合用来缓存图片,它会将强引用对象放在LinkedHashMap中,当缓存数据大小达到预定值的时候会将在该集合中比较少使用的对象从内存中移除。pac

火星男孩的分享空间 6755

【面试必备】Android中老生常谈的三级缓存框架问题你都了解了吗

上面的图画的比较乱,流程是:当activity要请求数据时 1、先检查内存中缓存数据如果内存中有数据并且数据不脏时直接返回内存中的数据。 2、如果内存中无数据并且数据不为脏时向本地数据库中请求数据,并且将请求的数据写入到内存中,再将内存中的数据返回。 3、如果内存和本地数据库中都没有数据返回,也就是内存中无数据并且数据为脏时,向服务器请求数据,服务器返回的数据,保存到本地数据库并且保存一份到内存,最后将内存中的数据返回。 三级缓存实现 由三级缓存的原理可以实现三级缓存的框架,数据的来源有三个地方,内存,本.

m0_66264910的博客 316

自己动手实现Android中的三级缓存框架

前言 2018年过去了,很久之前就希望自己可以潜心研究源码,研究技术,但是空闲时间不是看电影,就是玩游戏都没有认真看技术方面的东西感觉很内疚,2019年一定要好好的研究端正态度,认真学习技术。 为什么要三级缓存 有时候Android应用中要获取比较大的数据,比如说图片流,短视频流等,如果每次都从网络上去请求,那么响应速度很慢的,用户体验不好。 二级缓存 如果把服务器拉下来的数据保存在本地数据库中,...

有图有真相 2031
上一篇: Android_GreenDao
下一篇: Android_Retrofit2.0
绅V科技
博客等级 码龄9年 61粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值