gpt4 book ai didi

android - "getApplicationLabel"和 "loadLabel"有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 14:15:03 28 4
gpt4 key购买 nike

背景

我正在开发我的应用程序,它可以替代应用程序管理器(链接 here ),并希望对其进行一些优化。

事实证明,应用程序中最慢的事情之一是它的启动,其主要原因是获取应用程序名称。我打算缓存它,但如果可能的话,我也希望优化它的查询方式。

问题

Android 有两种获取应用名称的方法:PackageManager.getApplicationLabelApplicationInfo.loadLabel .

两者的描述大致相同,但我不确定应该使用哪一个。

不仅如此,查看“ApplicationInfo.loadLabel”的代码,它看起来是这样的:

public CharSequence loadLabel(PackageManager pm) {
if (nonLocalizedLabel != null) {
return nonLocalizedLabel;
}
if (labelRes != 0) {
CharSequence label = pm.getText(packageName, labelRes, getApplicationInfo());
if (label != null) {
return label.toString().trim();
}
}
if (name != null) {
return name;
}
return packageName;
}

我找不到“PackageManager.getApplicationLabel”的代码,因为它是抽象的。

问题

这两者有什么区别吗?

如果没有区别,为什么我们有2个非常相似的方法来获取相同的应用程序名称?我的意思是,只有当我同时拥有 applicationInfo 对象和 PackageManager 对象时,我才能使用它们中的任何一个,但这足以使用任何方法...

如果有区别,它们哪个在速度方面更好?

最佳答案

“PackageManager.getApplicationLabel”的源代码在“ApplicationPackageManager.java”中可用。具体如下;

@Override
public CharSequence getApplicationLabel(ApplicationInfo info) {
return info.loadLabel(this);
}

ApplicationPackageManager.java

我在 AppUtils.java 中看到相同的包装是按如下方式完成的;

/** Returns the label for a given package. */
public static CharSequence getApplicationLabel(
PackageManager packageManager, String packageName) {
try {
final ApplicationInfo appInfo =
packageManager.getApplicationInfo(
packageName,
PackageManager.MATCH_DISABLED_COMPONENTS
| PackageManager.MATCH_ANY_USER);
return appInfo.loadLabel(packageManager);
} catch (PackageManager.NameNotFoundException e) {
Log.w(TAG, "Unable to find info for package: " + packageName);
}
return null;
}

关于android - "getApplicationLabel"和 "loadLabel"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23113858/

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