【问题标题】:What is the best strategy for loading metadata in mobile applications?在移动应用程序中加载元数据的最佳策略是什么?
【发布时间】:2020-03-06 13:14:47
【问题描述】:

我的 Android 应用需要从我的后端服务器调用一些元数据,例如配置值、类别、图像描述等。数据不会经常更改,但有时我需要向主数据添加值并需要应用程序来获取它(但即便如此,时间也不是那么关键)。

这种情况的最佳做法是什么?每次需要时加载数据似乎有点矫枉过正。我应该在应用程序启动并使用缓存时加载它吗?更多选择?

如果这有助于找到解决方案,我正在使用改造 2。

【问题讨论】:

  • 在像你这样的项目中,我首先在 SplashScreen 上发布了一个小的 IamHere 数据。此操作确认用户已连接并能够访问我的服务器。我还在这里记录设备信息。 IamHere(静态 json 文件)返回对决定获取设置或其他一些配置有用的数据。我通常会在设置中添加一个版本号。如果设置版本与我在共享首选项中的数据不同,我会获取设置,否则跳过获取设置。同样在这里,如果有新版本可用,我可以通知用户并重定向到 Play 商店以更新应用程序。

标签: android caching retrofit2 metadata


【解决方案1】:

在我的例子中,我使用 SharedPreferences(键 - 值)来保存用户信息,例如安全令牌和用户数据。但是,如果您需要保存一些静态数据,例如 api url、api 密钥以在您的应用程序中使用某些服务,您可以在 build.gradle 中使用 resValues(您放置依赖项的位置)。

sharedPreferences 示例:

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0);
Editor editor = pref.edit();
editor.putString("key_name", "string value"); // Storing string
val content = pref.getString("key_name", null); // getting String

在 gradle 中保存静态数据的示例:

buildTypes {
        debug {
            resValue "string", "url_api", "http://test.api.org/"
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            resValue "string", "url_api", "https://production.api.org/"
        }
    }

当我需要使用改造来调用这个 url 时,我会使用这行代码:

val example = Retrofit.Builder()
.client(okHttpClient)
.baseUrl(application.getString(R.string.url_api)) // using resvalue from gradle
.addCallAdapterFactory(CoroutineCallAdapterFactory())
.build()
.create(ApropoApi::class.java)

对于开发,我可以使用调试 resvalue,并在发布我的应用程序后使用释放 resvalue。

根据您的业务逻辑,您必须决定使用什么。

【讨论】:

  • 感谢您的回答。我目前将信息存储在 sharedPreferences 中,但我的问题与加载策略更相关,例如何时调用静态数据以及多久调用一次? (定期通话、应用启动通话、每次使用数据时通话……)
猜你喜欢
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
相关资源
最近更新 更多