gpt4 book ai didi

java - 为什么 resolveInfo.loadLabel () 如此慢得离谱?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:37:44 31 4
gpt4 key购买 nike

在我的主屏幕替换应用程序中,我必须获取所有已安装应用程序的列表才能将它们放入应用程序抽屉中。因此,以下方法会在每个应用程序上运行;

public static App fromResolveInfo (Context context, PackageManager pacMan, AppManager appManager, ResolveInfo resInf)
{
String label = resInf.loadLabel (pacMan).toString ();
String packageName = resInf.activityInfo.applicationInfo.packageName;
String activityName = resInf.activityInfo.name;

App app = new App (context, appManager);
app.setLabel (label);
app.setPackageName (packageName);
app.setActivityName (activityName);

AppIcon icon = null;
if (appManager.isIconPackLoaded ())
icon = appManager.getIconPack ().getIconForApp (app);
if (icon == null)
icon = appManager.getIconPack ().getFallbackIcon (resInf.loadIcon (pacMan));

app.setIcon (icon);

return app;
}

问题是这里有一个瓶颈,而不是他最初预期的图标加载。该方法的第一行 (String label = resInf.loadLabel (pacMan).toString ();) 可能会占用 0 到 250 毫秒之间的任何时间(在相对高端的设备上)。在旧设备上,这成为一个真正的问题。
在我的测试中,我注意到当一个较慢的设备进行多任务处理并且由于某种原因必须重新加载应用程序抽屉时,完成此操作可能需要长达 30 秒(在所有安装的应用程序)。

缓存可以为此提供一个潜在的解决方案,但是如果应用程序的名称发生变化(偶尔会发生)怎么办?我必须从缓存中获取标签,然后在单独的线程中遍历所有应用程序并更正已更改的标签。这可能提供了一个解决方案,但它看起来更像是一个肮脏的黑客而不是一个真正好的解决方案。

有没有更快的方法来获取应用程序 Activity 的标签?另外,为什么 Android 需要这么长的时间才能获得应用的标签,和/或我能做些什么吗?

最佳答案

您可以获得标签为:

String label = (String) resInf.activityInfo.applicationInfo.loadLabel(pacMan);

如果您比较这两种方法的 Android 源代码,您会注意到 applicationInfo 中的方法执行的代码更少。也许瓶颈在于额外的代码。我个人从未比较过那些执行时间,因为我从未观察到此类问题。

关于java - 为什么 resolveInfo.loadLabel () 如此慢得离谱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31188658/

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