关于 "DONT_DELETE_DATA" 的一些问题,它是如何工作的,以及应用程序如何使用它

Posted

技术标签:

【中文标题】关于 "DONT_DELETE_DATA" 的一些问题,它是如何工作的,以及应用程序如何使用它【英文标题】:Some questions about "DONT_DELETE_DATA" , how it works, and how do apps use it 【发布时间】:2014-10-17 03:32:27 【问题描述】:

背景

我正在开发一个app-manager 应用程序,我注意到有一种方法可以获取“已卸载应用程序”列表(使用“GET_UNINSTALLED_PACKAGES”标志),这些应用程序要求避免删除卸载时的数据。

文档是这样说的:

标志参数,用于检索有关所有应用程序的一些信息 (甚至是已卸载的)具有数据目录的。这种状态可以 如果应用程序已被删除并带有标志,则结果 DONT_DELETE_DATA 有可能被替换或重新安装 未来。

注意:此标志可能会导致有关当前安装的信息较少 申请被退回。

问题

我已尝试调查有关此功能的更多信息,但除了此文档之外,我几乎没有找到任何关于它的信息。

问题

    此类应用程序如何请求此功能?除了我所写的内容外,我什至在文档的任何地方都找不到“DONT_DELETE_DATA”。查看this website,它似乎是PackageManager 类的一部分,但我看不到它在Eclipse 上是公开的。 数据会保留多长时间? 如何检测此类应用程序? PackageInfoApplicationInfo 有什么可以显示的吗? 也许是 ApplicationInfo 上的“FLAG_INSTALLED”? 我已经运行了它,即使我已经安装和卸载了许多应用程序,我得到的应用程序列表都没有关闭此标志。 选择卸载此类“幽灵”般的应用程序真的会删除它们吗? 我还能在内置应用管理器中看到这些应用吗? 我还能管理此类应用吗? 可以检索此类应用程序的哪些信息(图标、名称等...)? 我问这个是因为文档说“这个标志可能会导致更少的信息”。 文档说,当我使用 GET_UNINSTALLED_PACKAGES 时,我可能会获得较少的有关“当前安装的应用程序”的信息。这是一个错误吗?不应该是“当前安装的应用程序”吗? 当应用程序使用此标志不删除其数据时,它是指仅内部存储的私有数据,还是外部存储的公共数据?

【问题讨论】:

【参考方案1】:

根据https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/pm/PackageManager.java 的源代码,PackageManager 有一个带有标志参数的 deletePackage 方法。

DONT_DELETE_DATA 是这些标志之一。 所以,这不是应用程序的属性,它是 deletePackage 方法的一个标志,告诉它在删除应用程序时保留数据。

您在 javaDocs 中看不到 deletePackage,因为该方法有一个 @hide 标记。

【讨论】:

那么什么时候发生呢?什么时候删除这些数据?这对我来说真的很神秘。您能尝试回答其他问题吗? 当应用程序调用 PackageManager 的 deletePackage() 方法时发生。据推测,这将是“应用程序管理器”类型的应用程序。此外,据推测,数据永远不会被删除。至于您的其他问题 - 抱歉,我只是不知道。

以上是关于关于 "DONT_DELETE_DATA" 的一些问题,它是如何工作的,以及应用程序如何使用它的主要内容,如果未能解决你的问题,请参考以下文章

关于javaScript中的“===”,"!=="和"==","!="

关于NSLocalizedString(@"Foo %@",nil)

关于国家教育部最新答复的关于"第一学历"的个人看法

关于国家教育部最新答复的关于"第一学历"的个人看法

关于中国菜刀,如何"切菜"

关于String.intern()