【问题标题】:Where to store android application configuration to survive un/reinstall在哪里存储android应用程序配置以在卸载/重新安装后继续存在
【发布时间】:2014-12-08 23:02:55
【问题描述】:

我有一个应用程序需要大量文件来维护用户偏好和系统配置(这是现有项目的一个端口)。我想知道将此配置目录存储在 android 设备上的首选位置。

getExternalFilesDir() 似乎是一个不错的选择,但如果卸载或重新安装应用程序会删除此目录。这对于最终卸载来说很好,但如果我向客户提供应用程序的更新,我需要保留他们的偏好。

所以 getFilesDir() 中的某个地方是我的下一个候选者,但我应该将我的配置目录保存在哪里?只是在 /Android 的 getFilesDir() 的根目录中?或其他“顶级”目录。此位置的优点是文件将在重新安装时保留,但我需要提供一种方法来删除卸载时的配置,但这似乎不可能,因为似乎没有“ onUninstall()" 方法。

(想象一个 RAW 照片应用程序,它存储了每张照片的用户设置;这些设置将存储在哪里,以便应用程序的更新不会删除所有设置,但它们会在卸载时被删除?)

为了稍微改变一下,我需要能够提供额外的“包”应用程序来将文件添加到这个配置目录中——所以这些必须能够找到主应用程序的配置目录并且可以读写那里的文件。 (即它不能是私有的)

对于开发,我只是使用 getFilesDir() + "/MyApp",它现在可以工作,但似乎不对!

谢谢

【问题讨论】:

    标签: android configuration


    【解决方案1】:

    这对于最终卸载来说没问题,但如果我向客户提供应用程序的更新,我需要保留他们的偏好。

    getExternalFilesDir() 在普通升级期间保留。唯一会在卸载、“最终”或其他情况下将其删除。升级应用程序通常不涉及卸载。

    所以 getFilesDir() 中的某个地方是我的下一个候选人

    getFilesDir()getExternalFilesDir() 在升级和卸载方面具有相同的特征。

    此位置的优点是文件将在重新安装时保留

    不,它没有。 getFilesDir() 和您应用的 internal storage 中的所有位置都会在卸载时删除。

    想象一个 RAW 照片应用程序,它存储了每张照片的用户设置;这些设置将存储在哪里,以便应用更新不会删除所有设置,但会在卸载时删除?

    getFilesDir() 可能是候选人。

    我需要能够提供额外的“包”应用程序来将文件添加到这个配置目录中——所以这些必须能够找到主应用程序的配置目录并在那里读写文件。 (即它不能是私有的)

    我强烈建议您使用 IPC(例如,ContentProviderService、广播Intent),而不是在背后操纵应用程序的文件,这不仅是为了应用程序的稳定性,也是为了更好的安全性。例如,您可以使用 Android 的权限系统来调解 IPC。

    欢迎您将文件放在任何应用都可以访问的外部存储上,包括 Play 商店中超过 120 万个应用中的大多数以及大多数曾经编写的恶意软件应用。

    【讨论】:

    • 感谢您的澄清,一旦我掌握了基本原理,我将看看 IPC。外部存储上的文件是否有建议的结构?而不仅仅是/sdcard/MyApp?我是否应该至少符合 /sdcard/Applications/MyApp 之类的要求?
    猜你喜欢
    • 2012-06-15
    • 2013-09-25
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多