- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我的主屏幕替换应用程序中,我必须获取所有已安装应用程序的列表才能将它们放入应用程序抽屉中。因此,以下方法会在每个应用程序上运行;
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/
我正在为 Android 编写一个应用程序,其中获取应用程序的标签(实际名称)非常慢。特别是这段代码的表现非常糟糕: packageInfo.loadLabel(pm); 只是给你一些指标。在安装了
我编写了一个 android 服务,用于计算安装在手机上的应用程序列表并获取应用程序名称。 代码大致是这样的: List appListInfo = pm.getInstalledPackages(0
在我的主屏幕替换应用程序中,我必须获取所有已安装应用程序的列表才能将它们放入应用程序抽屉中。因此,以下方法会在每个应用程序上运行; public static App fromResolveInfo
背景 我正在开发我的应用程序,它可以替代应用程序管理器(链接 here ),并希望对其进行一些优化。 事实证明,应用程序中最慢的事情之一是它的启动,其主要原因是获取应用程序名称。我打算缓存它,但如果可
在 API 级别 21 的 Android API 中,字段标签已弃用,建议改用 loadLabel(android.content.pm.PackageManager)。 只是好奇是否有人碰巧找到任
我是一名优秀的程序员,十分优秀!