gpt4 book ai didi

android - 如何高效更新已安装的应用程序列表?

转载 作者:搜寻专家 更新时间:2023-11-01 09:27:00 25 4
gpt4 key购买 nike

在这个问题中我基本上不需要写代码来解决我的问题,我需要一个高效的方法(解决方案、流程或逻辑)来解决当前的问题。

在我的应用程序中,我有两个 Activity (MainActivity - InstalledAppsActivity)

因为加载已安装的应用程序列表(包名称 + 标签 + 图标)需要时间(随后填充 GridView):

我将它们保存在静态通用应用详细信息列表中(InstalledAppsActivity 的成员)。

我使用在 AndroidManifest.xml 中注册的 AppsBroadcastReceiver 监控安装/卸载应用程序操作

这是重要的部分

AppsBroadcastReceiver 触发包含包名称及其状态的广播,并由我的 InstalledAppsActivity 接收以更新静态通用已安装应用详细信息列表(更新 GridView 适配器)。

到目前为止一切顺利,除非 InstalledAppsActivity 被销毁:

如果用户按下后退按钮,InstalledAppsActivity:unregisterReceiver 发生,并且将不会收到带有包名称和状态的触发广播,这意味着静态通用列表(包含应用程序详细信息并由 GridView 适配器使用)将不会获取已更新。

更新我的静态通用应用详细信息列表的最佳方法/流程是什么,无论 InstalledAppsActivity 是 Activity 的还是已销毁?

最佳答案

基于documentation :

Apps that target Android 8.0 or higher can no longer register broadcast receivers for implicit broadcasts in their manifest. An implicit broadcast is a broadcast that does not target that app specifically. For example, ACTION_PACKAGE_REPLACED is an implicit broadcast, since it is sent to all registered listeners, letting them know that some package on the device was replaced

可能有两种方法:

  1. 启动前台服务并注册ACTION_PACKAGE_ADDED。缺点是它始终可见,并可能导调用池耗尽。它还会导致用户窃听。
  2. 使用 JobScheduler 定期安排作业。然后您可以使用 PackageManager.getChangedPackages

基于 PackageManager.getChangedPackages 的文档:

Returns the names of the packages that have been changed [eg. added, removed or updated] since the given sequence number. If no packages have been changed, returns null. The sequence number starts at 0 and is reset every boot.

然而基于BroadcastReceiver exception list您仍然可以注册到 ACTION_PACKAGE_FULLY_REMOVED 以在包被完全删除时接收广播并相应地执行您的任务

关于android - 如何高效更新已安装的应用程序列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49837703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com