このページの本文へ

これで作れる! Androidのアプリケーション 第8回

Androidアプリに必要なダイアログを作る

2010年08月20日 12時00分更新

文● 塩田紳二

  • この記事をはてなブックマークに追加
  • 本文印刷

時間のかかる処理とプログレスダイアログ

 もう1つのダイアログであるProgress Dialogは、基本的には、時間のかかる処理を行なうときに利用します。アプリケーション内で行なう処理には時間のかかるものがあります。このようなときに、なにも表示しないと、ユーザーは不安になり、画面のあちこちをタップしてしまったり、キーを操作してしまいます。

 またAndroidでは、アプリケーションがクラッシュしたときに、他の機能(たとえば電話の着信など)に影響を与えないように、アプリケーションを監視しており、無反応な時間が長いとアプリケーションの強制終了のダイアログを表示させることがあります。これは、英語表記のダイアログのタイトル「Application Not Responding」からANRと呼ばれます。ANRはタッチやキー操作などに対して5秒以内に反応しなかったときに、BroadcastReceiverが10秒以内に実行を完了しないときに自動的に起動されます。ANRが起動すると、ユーザーに対して、アプリケーションを強制終了させるかどうかのダイアログが表示されてしまいます。そうなると、ユーザーは多くの場合、強制終了を選択してしまうため、アプリケーションは、想定していないところで終了させられることになります。

 こうした問題を避けるためには、時間のかかる処理は別スレッドで行ない、メインスレッドではProgressDialogなどを使って、処理中であることを明確に示す必要があります。少なくともProgressDialogなどダイアログを表示させている間は、ANRに引っかかることはありません。

 スレッドを使うもう1つの理由は、AndroidのGUI処理は完全な別スレッドではなく、アプリケーションのメインスレッドで実行されます。AlertDialogでshow()メソッドを実行すると、制御は完全にAndroid側に移ってしまい、ダイアログが閉じらるか、なんらかのイベント(別途イベントハンドラは定義しておく必要はありますが)が発生しない限り、アプリケーションのスレッドには戻ってきません。

 また、これまでToastでメッセージを表示させていましたが、このToastによるメッセージ表示のあと処理を続けてしまうと、メッセージは表示されません。Toastメッセージを表示させたいなら、そのあとアプリケーションのスレッドは、イベント待ち状態にしなければなりません。

 もう1つ注意しないといけない点ですが、GUIはアプリケーションのメインスレッドで実行されることから、GUI関連のAPI呼び出しなどは、すべてメインスレッド側で行なう必要があることです。つまり、時間のかかる処理のスレッドと、ProgressDialogを表示させるスレッドがあったとすると、時間のかかる処理のほうを別スレッドとして起動し、ProgressDialogを表示させるのはアプリケーションのメインスレッド側で行なわねばならないことです。

 実際、別スレッド側でGUI関連の機能を使おうとすると、アプリケーションは停止させられます。GUI関連のAPIの中で、スレッドがチェックされており、メインスレッド以外からの呼び出しはすべてエラーとされます。というのは、別スレッドからのGUI操作を許すと、同じオブジェクトを複数のスレッドで同時に更新してしまう可能性もあるからです。このためGUIの更新処理が発生するAPI呼び出しはメインスレッドからのみ可能で、呼び出されたAPIは、メインスレッド上で動作します。

 ただ、時間がかかる状態といっても、ANRの判断は絶対時間なのに対して、Androidの場合、機種による違い(CPUクロックやメモリ搭載量)などによって処理時間が変わってきます。開発時にエミュレータや高速な実機などでテストしていると、わからないこともあります。かといってすべての実機を用意するというわけにもいきません。

 筆者が経験した範囲では大抵の処理でANRに引っかかるようなことはないのですが、配列のソートなどで要素数が数百程度で、独自のコンパレータなどを使うような場合には、ProgressDialogなどを表示させないと、ANRに引っかかるようです。

 ProgressDialogには2つの種類があります。1つは、水平なバーが左端からぬりつぶされていくもので、経過途中で全体のどの程度に相当するのかがわかる場合、あるいは、何らかの値で進行状態を表現できる場合に利用するものです。ですが、処理によっては、どれぐらい時間がかかるのかも、現在どこまで処理が進んだのかもわからない場合があります。

写真はSDKサンプルのApiDemoのもの。最大値のわかっている数値で進行状態を確認できる場合には、この形式のプログレスバーが利用できる

 たとえば、ファイルをダウンロードするような場合、ファイルサイズがわかっていれば、現在までにダウンロードしたデータサイズで、進行状態を表現することができます。ですが、今回のように並べ変え処理では、途中段階を表現する方法がありません。

 このような場合には、短いバーを並べて、これが回転しているように見えるプログレスバーを使います。このプログレスバーは、表示させている間は、アニメーションが行なわれるため、ユーザーからは、処理が進んでいることがわかります。

途中状態のチェックができない場合、このような形式のProgressDialogを使う。アニメーション部分は、画面サイズ、密度などにより違っているが、基本的には、バーが回転するアニメーションになる

カテゴリートップへ

本記事はアフィリエイトプログラムによる収益を得ている場合があります

この連載の記事
1
Apple 2026 MacBook Neo A18 Proチップ搭載13インチノートブック:AIとApple Intelligenceのために設計、Liquid Retinaディスプレイ、8GBユニファイドメモリ、512GB SSDストレージ、1080p FaceTime HDカメラ、Touch ID - インディゴ
Apple 2026 MacBook Neo A18 Proチップ搭載13インチノートブック:AIとApple Intelligenceのために設計、Liquid Retinaディスプレイ、8GBユニファイドメモリ、512GB SSDストレージ、1080p FaceTime HDカメラ、Touch ID - インディゴ
¥114,800
2
Apple 2026 MacBook Air M5チップ搭載13インチノートブック:AIとApple Intelligence、13.6インチLiquid Retinaディスプレイ、16GBユニファイドメモリ、512GB SSDストレージ、12MPセンターフレームカメラ、日本語キーボード、Touch ID - シルバー
Apple 2026 MacBook Air M5チップ搭載13インチノートブック:AIとApple Intelligence、13.6インチLiquid Retinaディスプレイ、16GBユニファイドメモリ、512GB SSDストレージ、12MPセンターフレームカメラ、日本語キーボード、Touch ID - シルバー
¥177,333
3
【整備済み品】 富士通 タブレット ノートパソコン ARROWS Tab V727 12.3インチ 中古 タブレット【Windows 11 】【MS Office2019 H&B 搭載 】第7世代 Core M3/ メモリ 4GB / SSD 128GB /無線LAN/HDMI/LTE/タッチペン 付属(整備済み品)
【整備済み品】 富士通 タブレット ノートパソコン ARROWS Tab V727 12.3インチ 中古 タブレット【Windows 11 】【MS Office2019 H&B 搭載 】第7世代 Core M3/ メモリ 4GB / SSD 128GB /無線LAN/HDMI/LTE/タッチペン 付属(整備済み品)
¥9,999
4
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
¥35,129
5
【整備済み品】ノートパソコン N E C Versapro-VKシリーズ core i3 第8世代/ノートPC/Webカメラ内蔵/Windows11/MS & Office2019/メモリ4GB/SSD128GB/DVD/15.6インチ/HDMI/Bluetooth/wifi/マウス付属/初期設定不要/初心者向け(i3-8/SSD 128GB)
【整備済み品】ノートパソコン N E C Versapro-VKシリーズ core i3 第8世代/ノートPC/Webカメラ内蔵/Windows11/MS & Office2019/メモリ4GB/SSD128GB/DVD/15.6インチ/HDMI/Bluetooth/wifi/マウス付属/初期設定不要/初心者向け(i3-8/SSD 128GB)
¥14,850

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
¥2,278
2
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,890
3
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥1,080
4
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥740
5
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
¥990
6
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
¥1,899
7
NIMASO ガラスフィルム iPad 第11世代(A16) 2025用/iPad 10.9インチ 第10世代 2022用 衝撃吸収 強化 ガラス 保護フィルム 指紋防止 ガイド枠付き NTB22I574
NIMASO ガラスフィルム iPad 第11世代(A16) 2025用/iPad 10.9インチ 第10世代 2022用 衝撃吸収 強化 ガラス 保護フィルム 指紋防止 ガイド枠付き NTB22I574
¥1,599
8
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
¥5,645
9
USB Type C ケーブル【2M/2本セット】Sweguard USB-C & USB-A 3.1A USB C ケーブル【QC3.0対応 急速充電】 タイプc 充電 iPhone17 16/iPhone 15 Pro MAX, iPad Pro,Samsung Galaxy S26/S25/S24/S23/S22/S21/S20,Sony,Xiaomi,Pixel,Type-c機種対応(灰)
USB Type C ケーブル【2M/2本セット】Sweguard USB-C & USB-A 3.1A USB C ケーブル【QC3.0対応 急速充電】 タイプc 充電 iPhone17 16/iPhone 15 Pro MAX, iPad Pro,Samsung Galaxy S26/S25/S24/S23/S22/S21/S20,Sony,Xiaomi,Pixel,Type-c機種対応(灰)
¥1,099
10
JAMJAKE iPad用ペンシル アップルペンシル代用ペン 2018年~2026年 iPad対応 タッチペン 超高感度 極細 スタイラスペン Type-C急速充電 傾き感知/磁気吸着/誤作動防止機能対応 軽量 耐摩 学生 子供 筆記 絵を描く デザイン用 ドローイング用
JAMJAKE iPad用ペンシル アップルペンシル代用ペン 2018年~2026年 iPad対応 タッチペン 超高感度 極細 スタイラスペン Type-C急速充電 傾き感知/磁気吸着/誤作動防止機能対応 軽量 耐摩 学生 子供 筆記 絵を描く デザイン用 ドローイング用
¥1,879

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン