当前位置: 首页 > news >正文

常熟网站深圳做网站

常熟网站,深圳做网站,制作校园网站,百度爱做网站关于作者#xff1a;CSDN内容合伙人、技术专家#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 #xff0c;擅长java后端、移动开发、人工智能等#xff0c;希望大家多多支持。 目录 一、导读二、概览三、使用3.1 Preferences DataStore添加依赖数据读… 关于作者CSDN内容合伙人、技术专家 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 擅长java后端、移动开发、人工智能等希望大家多多支持。 目录 一、导读二、概览三、使用3.1 Preferences DataStore添加依赖数据读写 3.2 ProtoDataStore添加依赖数据读写 3.3、在同步代码中使用 DataStore3.4、在多进程代码中使用 DataStore 四、DataStore MMKV五、 推荐阅读 一、导读 我们继续总结学习Java基础知识温故知新。 二、概览 DataStore 是一种用于 Android 应用程序数据存储的新的推荐方式。 它是在 Android Jetpack 组件中引入的旨在替代 SharedPreferences并提供更强大、易于使用的 API。 DataStore 基于 Kotlin 协程和 Flow 构建而成 提供了一种类型安全且异步的数据存储解决方案。 相比于 SharedPreferencesDataStore 具有以下优点 异步操作DataStore 提供了异步的读写操作避免了阻塞主线程的问题。这使得在读取和写入数据时应用程序可以更好地保持响应性能。 类型安全DataStore 支持使用协议缓冲区Protocol Buffers来定义数据模型这样可以确保在编译时进行类型检查。数据模型的更改不会导致运行时错误而是在编译时进行检测。 支持多种数据类型DataStore 支持存储不同类型的数据包括原始类型、对象或自定义类。 数据一致性DataStore 提供了一致性和安全性保证保证在多个写入操作中的数据一致性。 流式数据访问DataStore 支持使用流Flow来访问数据使得可以轻松地观察数据的变化并进行相应的更新。 DataStore 提供了两个主要的实现方式PreferencesDataStore 和 ProtoDataStore。 PreferencesDataStore 适用于存储简单的数据类型使用键值对来存储数据。 ProtoDataStore 则使用 Protocol Buffers 定义数据模型并支持存储更复杂的数据结构类型化对象。 三、使用 3.1 Preferences DataStore 适用于存储简单的数据类型使用键值对来存储数据 添加依赖 // Preferences DataStore (SharedPreferences like APIs)dependencies {implementation androidx.datastore:datastore-preferences:1.0.0// optional - RxJava2 supportimplementation androidx.datastore:datastore-preferences-rxjava2:1.0.0// optional - RxJava3 supportimplementation androidx.datastore:datastore-preferences-rxjava3:1.0.0}// Alternatively - use the following artifact without an Android dependency.dependencies {implementation androidx.datastore:datastore-preferences-core:1.0.0} 数据读写 RxDataStorePreferences dataStore new RxPreferenceDataStoreBuilder(context, /*name*/ settings).build();Preferences.KeyInteger EXAMPLE_COUNTER PreferencesKeys.int(example_counter);FlowableInteger exampleCounterFlow dataStore.data().map(prefs - prefs.get(EXAMPLE_COUNTER));SinglePreferences updateResult dataStore.updateDataAsync(prefsIn - {MutablePreferences mutablePreferences prefsIn.toMutablePreferences();Integer currentInt prefsIn.get(INTEGER_KEY);mutablePreferences.set(INTEGER_KEY, currentInt ! null ? currentInt 1 : 1);return Single.just(mutablePreferences); }); // The update is completed once updateResult is completed.3.2 ProtoDataStore 使用 Protocol Buffers 定义数据模型并支持存储更复杂的数据结构 添加依赖 // Typed DataStore (Typed API surface, such as Proto)dependencies {implementation androidx.datastore:datastore:1.0.0// optional - RxJava2 supportimplementation androidx.datastore:datastore-rxjava2:1.0.0// optional - RxJava3 supportimplementation androidx.datastore:datastore-rxjava3:1.0.0}// Alternatively - use the following artifact without an Android dependency.dependencies {implementation androidx.datastore:datastore-core:1.0.0} 数据读写 Proto DataStore 要求在 app/src/main/proto/ 目录的 proto 文件中保存预定义的架构。 此架构用于定义在 Proto DataStore 中保存的对象的类型。 syntax proto3;option java_package com.example.application; option java_multiple_files true;message Settings {int32 example_counter 1; }private static class SettingsSerializer implements SerializerSettings {Overridepublic Settings getDefaultValue() {Settings.getDefaultInstance();}Overridepublic Settings readFrom(NotNull InputStream input) {try {return Settings.parseFrom(input);} catch (exception: InvalidProtocolBufferException) {throw CorruptionException(“Cannot read proto.”, exception);}}Overridepublic void writeTo(Settings t, NotNull OutputStream output) {t.writeTo(output);} }RxDataStoreByte dataStore new RxDataStoreBuilderByte(context, /* fileName */ settings.pb, new SettingsSerializer()).build();FlowableInteger exampleCounterFlow dataStore.data().map(settings - settings.getExampleCounter());SingleSettings updateResult dataStore.updateDataAsync(currentSettings -Single.just(currentSettings.toBuilder().setExampleCounter(currentSettings.getExampleCounter() 1).build())); 3.3、在同步代码中使用 DataStore DataStore 的主要优势之一是异步 API但可能不一定始终能将周围的代码更改为异步代码。如果您使用的现有代码库采用同步磁盘 I/O或者您的依赖项不提供异步 API就可能出现这种情况。 Kotlin 协程提供 runBlocking() 协程构建器以帮助消除同步与异步代码之间的差异。您可以使用 runBlocking() 从 DataStore 同步读取数据。RxJava 在 Flowable 上提供阻塞方法。以下代码会阻塞发起调用的线程直到 DataStore 返回数据 Settings settings dataStore.data().blockingFirst();dataStore.data().first().subscribe(); 这样DataStore 可以异步读取数据并将其缓存在内存中。以后使用 runBlocking() 进行同步读取的速度可能会更快或者如果初始读取已经完成可能也可以完全避免磁盘 I/O 操作。请尽可能避免在 DataStore 数据读取时阻塞线程。阻塞界面线程可能会导致 ANR 或界面卡顿而阻塞其他线程可能会导致死锁。 3.4、在多进程代码中使用 DataStore DataStore 多进程功能目前仅在 1.1.0 Alpha 版中提供 为了能够在不同进程中使用 DataStore需要使用 MultiProcessDataStoreFactory 构造 DataStore 对象。 val dataStore: DataStoreSettings MultiProcessDataStoreFactory.create(serializer SettingsSerializer(),produceFile {File(${context.cacheDir.path}/myapp.preferences_pb)} )四、DataStore MMKV 看一组数据对比图片来源于MMKV 开源网站 至于如何使用就不描述了非常简单。 个人感觉 DataStore 没有 MMKV 好用推荐使用 MMKV但是各有优劣吧。 jetpack 官网 datastore 五、 推荐阅读 Java 专栏 SQL 专栏 数据结构与算法 Android学习专栏
http://www.dnsts.com.cn/news/69411.html

相关文章:

  • 简述网站制作过程网站建设自建与租用区别
  • 杭州 手机网站建设使用session和cookie实现网站自动登录 .net
  • 厦门网站建设工作公司logo设计生成器
  • 南京网站开发个人诚信网站认证必需做吗
  • 公司网站及微信公众号建设意义wordpress 权限说明
  • 哪家建网站网站编辑器是怎么做的
  • 天辰建设工程信息网昆明seo怎么做
  • 企业标准型手机网站房子设计图平面图
  • 中山市两学一做网站苏州城乡建设局的网站首页
  • dreamware做网站网站规划设计是什么
  • 网站建设php的心得和体会域通联达网站
  • 网站建设定制开发价格建设美丽中国征文大赛
  • 服装设计考研哪些大学搜索优化师
  • 好看的创意网站设计网站模版怎么做的
  • 关于网站建设的几点体会中国营销型网站
  • 贵州网站开发哪家便宜所见即所得型网页制作工具
  • 天津国际工程建设监理公司网站广州有哪些区有几个区
  • 电子商务网站建设论文摘要wordpress怎样调用分类名称
  • 什么网站可以做自媒体成都效果图制作公司排行榜
  • fwa 网站 欣赏超级外链发布
  • 建设网站的公司汇总新网网站建设资料
  • 汉川网站制作工业互联网平台有哪些
  • 为什么网站浏览不是做的那样html5微网站源码
  • 简洁网站设计做购物网站 推广
  • 做公司网站需要提供的资料seo与网站优化 pdf
  • 私自建立网站网站判决书网站域名实名认证怎么做
  • 扬州网站建设哪家公司好网站建设知乎
  • 多少钱 网站建设做推广又能做网站
  • 申请个人网站域名南阳网站建设费用
  • 网站开发时间进度表wordpress+示例