Androidでマルチスレッド処理をする方法
Androidでマルチスレッド(マルチタスク・バックグラウンド処理)をするには次の方法があります。
[参考記事] UIを操作するのにhandlerを使う理由 thread WebViewCoreThread exiting due to uncaught exception
Java標準のThreadクラスを使用する方法
Android独自のAsyncTaskを使用する方法
Java標準のThreadクラスを使用する方法
Androidアプリはマルチスレッドで動作することができますが、UIはシングルスレッドモデルです。
このためメインスレッドのUI以外のスレッドからUIにアクセスすると例外が発生します。
次のように別スレッドでUIにアクセスすると例外が発生します。
public void onClickButton(View v) { new Thread(new Runnable() { @Override public void run() { // マルチスレッドにしたい処理 ここから String result = getMessage(); // 何かの処理 msgView.setText(result); // 画面に描画する処理 // マルチスレッドにしたい処理 ここまで } }).start(); }
そこで別スレッドからUIスレッドへの橋渡しとなるHandlerを使用します。
Handler handler= new Handler(); public void onClickButton(View v) { new Thread(new Runnable() { @Override public void run() { // マルチスレッドにしたい処理 ここから final String result = getMessage(); // 何かの処理 handler.post(new Runnable() { @Override public void run() { msgView.setText(result); // 画面に描画する処理 } }); // マルチスレッドにしたい処理 ここまで } }).start(); }
[参考記事] UIを操作するにはhandlerを使う thread WebViewCoreThread exiting due to uncaught exception
Android独自のAsyncTaskを使用する方法
AndroidではAsyncTaskクラスというマルチタスク(非同期処理)用のクラスがあります。
AsyncTaskクラスのサブクラスを作成し、onPreExecute()、doInBackground()、onPostExecute()をオーバーライドして使用します。
onPreExecute | 前処理 |
doInBackground | バックグラウンドで動かす処理 |
onPostExecute | 終了時の処理 |
AsyncTaskのサブクラス化する際にAsyncTask<Param, Progress, Result>という形で、doInBackground()の引数、進捗具合を表すパラメータ、doInBackground()の戻り値(=onPostExecuteの引数)をテンプレート引数に渡すようになっています。
package com.example.test; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; public class ThreadSample extends Activity implements OnClickListener{ TextView mTextView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //TextView取得 mTextView = (TextView)findViewById(R.id.TextView1); //TextViewタップ時にonClick実行 findViewById(R.id.TextView1).setOnClickListener(this); } @Override public void onClick(View arg0) { // スレッド起動 new AsyncAppTask().execute(); } class AsyncAppTask extends AsyncTask<Void, Void, String>{ @Override protected void onPreExecute() { // ここに前処理を記述します // 例) プログレスダイアログ表示 } @Override protected String doInBackground(Void... arg0) { // バックグランド処理をここに記述します return "Thread Samples"; } @Override protected void onPostExecute(String result) { // バックグランド処理終了後の処理をここに記述します // 例) プログレスダイアログ終了 // UIコンポーネントへの処理 mTextView.setText(result); } } }
関連記事
- OracleとGoogleとのJavaについての訴訟
- 画面UIパーツのclass一覧
- ListViewにArrayAdapterを渡すサンプルコード(一覧項目から選択する場合のUI)
- assetsフォルダのファイルを扱う方法 AssetManager
- AndroidManifest.xml の permission一覧
- SDカードが接続されているかどうか知る方法 書き込み可能かどうか 読み込み可能かどうか
- SDカードの空き容量を調べる方法
- Colorクラスでの色指定
- 画像を解像度ごとに振り分ける方法 国際化する方法(drawable、layout、valuesなどの修飾句)
- Mobile Network Code(MNC)の一覧[V-Z]
- Mobile Network Code(MNC)の一覧[T-U]
- Mobile Network Code(MNC)の一覧[S]
- Mobile Network Code(MNC)の一覧[O-R]
- Mobile Network Code(MNC)の一覧[M-N]
- Mobile Network Code(MNC)の一覧[J-L]
- Mobile Network Code(MNC)の一覧[H-I]
- Mobile Network Code(MNC)の一覧[E-G]
- Mobile Network Code(MNC)の一覧[C-D]
- Mobile Network Code(MNC)の一覧[A-B]
- Androidマーケットに表示されるアプリはSIMで制限されています
- Mobile Country Code(MCC)の一覧
- SDカードからサムネイル画像を取り出す getThumbnailメソッド
- 文字列の置き換えを行う方法 (replaceAllで気をつけること)
- 文字列の部分一致検索を行う方法
- 処理中を表すプログレスダイアログを表示する
- res/xmlフォルダの1MB以上のxmlファイルは読み込めない
- apkファイルインストール時のエラー一覧
- Java メモリー使用量を取得する方法
- Activityのメソッド順
- SDカードに保存したファイルをギャラリーなどに反映させる方法
- アプリケーションプロセスを強制的に終了する方法
- res/drawableの画像を変更しても、変更が反映されない場合
- Singletonパターンを使ってクラスのインスタンスを1つにする(共有クラスのリソースを削減する方法)
- apkファイルのインストール時に INSTALL_FAILED_INSUFFICIENT_STORAGE と出る場合
- AndroidアプリでTextViewに使用できるフォントの一覧
- TextViewに独自フォントを使用する方法
- assetsフォルダには1MB以上の非圧縮ファイルを設置できない
- コマンドプロンプトの文字コードを変える方法
- EditTextのソフトキーボードの『完了』を虫メガネアイコンなどに変更する方法
- Viewの表示・非表示を切り替える方法
- apkファイルをAndroid端末にUSB接続でインストールする方法 (開発者ではない人向け)
- Xperia(Sony Ericsson)のUSBドライバをインストールする方法
- リソースファイルの設置場所と利用方法
- OSのバージョンと特徴
- 画像を拡大縮小する方法
- LinearLayout をスクロールさせる方法(ScrollViewの使用方法)
- タイトルバーやステータスバーを非表示にする方法
- ステータスバーの高さを取得する方法
- 画面解像度などディスプレイの情報を取得する方法
- アプリ起動時にスプラッシュ画面を表示させる方法
- 最初に呼び出されるJavaファイル(Activity)を指定する方法
- WebViewの設定一覧
- WebViewで横の隙間を消す方法(スクロールバー領域を消す)
- layoutのbackgroundで透過(transparent)を指定する方法
- Android実行時にError:ShouldNotReachHere() [hs_err_pid.log]
- WebViewを使ってWebサイトを表示する方法 WebKitからアプリ、アプリからWebKitへの連携処理
- UIを操作するのにhandlerを使う理由 thread WebViewCoreThread exiting due to uncaught exception
- アプリが実行されるまでの流れ ソースコードから実行まで
- deleteOnExit()メソッドは環境によって動作が違う JVM+Windows
- [暗号化]ブロック暗号とは(AES/DES/Blowfish PKCS5Padding ECB/CBC IV)
- MediaPlayer のメソッド一覧
- EclipseのビューをカスタマイズしてファイルエクスプローラやLogCatを表示する
- xmlファイルの開始タグと閉じタグは大文字小文字も同じにする
- 動画を再生する方法 MediaPlayer
- 動画を再生する方法 VideoView
- Androidのソースファイルを入手する方法
- テーマ機能を使ってアプリケーション全体にスタイルを適用させる方法
- スタイルを使って属性を一括で管理する方法
- よく使うUIパーツのプロパティ
- wrap_contentとfill_parentの違い
- Androidのlayoutで使用できるパーツの一覧 ビュー(部品)
- ターミナルで端末操作をする方法
- アプリケーションのログを見る方法
- ログの出力 アプリのステータスを確認する
- layoutの種類と使用方法
- 画面の向きによってレイアウトを変更する方法
- Java標準以外のライブラリ(パッケージ)を読み込む方法 jarファイルを追加する
- apkファイルをサーバから端末にダウンロードする
- build.propの設定値
- 2.0/2.1以前で再生できる動画が2.2以降で再生できない
- /data/anr/traces.txtファイルとは
- プロジェクトが実行ができない main.out.xml string.out.xml
- Android Maps API Keyを取得する方法 Google Mapsを利用する
- 実機内やエミュレータ内のファイルを操作する DDMS、adbとサンプルコード
- EclipseでAndroidプロジェクトを作る方法
- iPhoneアプリやAndroidアプリを簡単に作成する方法 ハイブリッドアプリケーション
- Android公式の開発者向けサイト
- アプリからネットワーク通信を行う場合
- Androidアプリの開発環境を作る方法
- 実機のスクリーンショットをとる方法
- 開発中のアプリケーションを実機でテストする方法
- 横画面に固定する、縦画面に固定する(表示モードの固定)
- EditTextで改行させない方法
スポンサーリンク