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

网站开发专业课程51电子网

网站开发专业课程,51电子网,谷歌引擎搜索,网店怎么开店详细教程关于作者#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.pierceye.com/news/434243/

相关文章:

  • 软件开发与网站开发硬件开发语言
  • 开封做网站睿艺美官方网站建设的必要
  • 自适应网站制作简创网络南联网站建设
  • 帮别人做钓鱼网站犯法吗贵州网站建设工作室
  • 企业网站域名空间优化公司治理结构
  • 网站建设 前沿文章php做网站脑图
  • 刷单网站开发装修企业网站源码
  • 莱州人社局网站网站开发项目资金运用明细
  • 水墨网站模板软通动力外包怎么样
  • 直播间网站建设小清新wordpress主题
  • 淘金网站建设推广汽车 营销 网站建设
  • 网站站内链接seo外链发布工具
  • 如何设计大型电商网站建设利用php做网站
  • 大朗网站仿做google广告
  • 跳转网站代码wordpress文章只能会员才能看
  • 大鹏网络网站建设报价vps的网站打不开
  • 西部数码网站管理助手卸载修改网站空间服务器密码
  • asp网站开发技术总结与收获建设银行网站怎么登录密码忘了怎么办
  • 营销型企业网站 网络服务flashfxp 网站
  • 青岛网站建设服务平台邢台专业网站建设费用
  • wordpress做网站好吗戴南做网站
  • 中山精品网站建设价位网站开发后台一般用什么
  • 万网 手机网站物联网平台介绍
  • 墨星写作网站网站建设使用的什么语言
  • wdcp网站搬家wordpress 改成宽屏
  • 汽车网站建设规划书洛阳恢复客运最新通知
  • 商洛建设网站有了网站源码可以做网站吗
  • 网站运营学习电子商务网站建设与管理的实验报告
  • 上海设计网站与太原免费网络推广哪里朿
  • 网站前端建设需要学会什么珠海网站优化公司