FC2ブログ

[Android] 端末内インストールアプリ一覧表示が遅い

[Android] アプリケーションSDU
で、公開したアプリの性能の向上を考えていて、調べた結果をメモ。

現在、アプリ一覧の取得をPackageManagerから行っているが、
どうも処理に時間がかかる。
# PackageManagerでのアプリ情報取得に時間がかかるという方もいるみたいです

各処理に処理時間を計測するログを埋め込んだところ、
 ApplicationInfo#loadLabel()
が大きな原因のようです。
※ android.content.pm.ApplicationInfo

ちょっと実装をのぞいてみたら以下のようになっていた。

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;
}



label.toString().trim();

で trim() しているのが問題そうだな。
# trim()はホントに必要なのかな??

String#trim() のパフォーマンスが悪いという記事が
チラホラ見つかったので、やっぱり原因はここの可能性が高い。

そこで、
trim()しないApplicationInfoをカスタマイズしたクラスを
作成しようと検討してみたが、単純にApplicationInfoを
継承して loadLabel() をオーバーライドすればできるという
考えは甘いようです。
かなり、厄介そうなのでひとまずこの部分は諦めておくことにしました。
#別のところで少しパフォーマンス改善ができそうだった

Android側のコードだと、たしか SpanableString あたりも
効率が悪かった気がします。

コメントの投稿

非公開コメント

プロフィール

hiiro

Author:hiiro

最新記事
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Counter