2011年06月22日

ProgressDialog使用断念

えー、以前からの続きで端末にインストールされているアプリの一覧を表示するリストを作っている訳ですが、なんだか悩みどころが同時多発しております。
その中で、今回はリストの表示を選択してから実際にリストが表示されるまでのタイムラグというか遅さについてぼやいてみたいと思います。

インストールされているアプリの一覧を取得するには

PackageManager pm = getPackageManager();
Intent intent = new Intent(Intent.ACTION_MAIN,null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);

List<ResolveInfo> appList = pm.queryIntentActivities(intent, 0);

で、取得できるらしいですが、(前回のソースの通り)これをリストに載せてチェックなどつけたりしてから表示している訳です。
しかし、ここで画面に表示がでるまでに、遅い端末だと10秒以上かかります。
確かに、Android OSの設定にある「アプリケーションの管理」を表示させる時も結構時間がかかるので、やむを得ない部分ではあると思うのですが、「アプリケーションの管理」の場合先にテキストが表示されてから時間をかけてアイコン画像を読み込むので、ユーザーは待ってくれると思いますが、私のアプリだとタップしてからの反応も鈍く、その後画面はブラックアウトした状態で時間がかかるので、その間に止まったかと思われるのではないかと思います。
2回目からはキャッシュが効くのか割と速く表示されるのですが、初回の遅さに対して「しばらくお待ちください」のProgressDialogを出そうと思ったのですが、これがうまくいきませんでした。

参考書通りスレッドでリストを取得した後ProgressDialogを閉じるのですが、そうすると画面には何も表示されません。
しばらく悩んだ末、どうもスレッドでUIを動かしてはいけないみたいな感じなので(説明されているサイトの説明が読んでも理解できませんが、多分(笑))、断念しました。

しかし、それならどうしようと思いながらもう一度良く「アプリケーションの管理」の画面をじっと見ると、アイコン表示待ちの間タイトルバーのところに小さなProgressDialogの輪っか(みたいなクルクル回る表示)が出ていますね。(もしかすると普段から激速の端末を使っている方は気づかないかも)
よしっ!これだ、これをマネしよう!と思ってsetProgressBarIndeterminateVisibility(boolean visible)を使うということを調べて組み込んでみたのですが、結果はNG。
結局タイトルバーもリストと同時に表示されるので、意味がないのでした。
しからば、とタップ直後に「しばらくお待ちください」のToastを出そうと、起動するActivityのonCreate()に書いてみたのですが、これも時間がかかった後リストが表示される直前にToastが表示されてしまうのでした。

TechFirm様 <a href="http://labs.techfirm.co.jp/android/cho/2161" target="_blank">Adapterの高速化</a>とかを参照させていただいたり、メソッドを分割してタイトルだけでも先に出ないかと色々いじってみたのですが、あまり変わった感じはしません。
ちなみにアイコン画像を読み込まないようにしても遅いので、リスト画面の出し方に何かコツがいるような気がします。
(NDKとか使われていたら、僕には手出しできませんが)

他にも色々と問題が出てきてしまったので、とりあえずいったんここは飛ばして、最悪ユーザー様に我慢していただくという方針かな?
(しかし、このさくらのブログ、ソースが見づらいですよね。SyntaxHilighterとか導入できれば良いのに)

posted by 白虹 at 23:27| Comment(3) | TrackBack(0) | Android開発
この記事へのコメント
また来てしまいました、すぴです。
帰ってくるのに時間がかかる処理は、
AsyncTaskやHandlerを使うのが良いかと。
AsyncTaskに関してはこちらのDownloadTaskの部分を参考にどうぞ。
http://labs.techfirm.co.jp/android/cho/1079

今回だとdoInBackgroundでアプリ一覧を取得した後、
onPostExecuteでアダプタを作ってListViewにセットすることになりそうです。
読み込み中のクルクルを出す場合はonPreExecuteで表示して
onPostExecuteで消去とかでしょうか。。
Posted by すぴ at 2011年06月27日 20:23
すぴさん。
毎度ありがとうございます!
やってみます!
Javaと並行してやっているので、ただでさえスキルがないのにグチャグチャ状態ですが、結果はブログで報告させていただきたいと思います。
Posted by 白虹 at 2011年06月27日 23:03
風俗店を探よりココ!!男性は報酬あり!d(´∀`*) http://img.gffz.biz
Posted by 啓子 at 2012年10月15日 06:56
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/46207400

この記事へのトラックバック