QA@IT

Androidアプリでのthreadの中断方法について

9554 PV

初めて投稿させて頂きます。

現在、Androidアプリを作成しているのですがバックグラウンド処理中に
端末のバックキーを押された際の処理の中断方法について教えて頂けますでしょうか。

ちなみに以下の様にProgressDialogを表示後、Thread.start()で処理を実行し
端末のバックキーを押された際に Thread.stop()をすると以下の例外が発生しました

発生した例外)
Deprecated Thread methods are not supported.
java.lang.UnsupportedOperationException

以下ソースです

Thread thread;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    showDialog(DIALOG_PROG);
    thread = new Thread(runnable);
    thread.start();
}

private Runnable runnable = new Runnable(){
    public void run() {
        // ローカルのDBへの書き込みなどのバックグラウンド処理

        finalHandler.sendMessage(new Message());
    }

    private Handler finalHandler = new Handler() {
        public void handleMessage(Message msg) {
            // プログレスダイアログ終了
            dismissDialog(DIALOG_PROG);
            // UI処理

        }
    }
}

@Override
protected Dialog onCreateDialog(int id) {
    ProgressDialog progDialog = new ProgressDialog(this);
    progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progDialog.setMessage("処理中です...");
    progDialog.setCancelable(true);
    progDialog.setOnCancelListener(new OnCancelListener() {
        public void onCancel(DialogInterface dialog) {
            // ★ここでThreadを終了したい
            // thread.stop();   // エラー発生
        }
    });
    return progDialog;
}

回答

Androidアプリで、
・非同期処理
・プログレス等のUIと非同期処理との連携
あたりはAsyncTaskを使うのが定番です。

AsyncTaskをキーワードに、Web検索で
「複数の画像ファイルダウンロード中にぐるぐるダイアログを表示。戻るボタンでキャンセル」等見つかると思います。

http://developer.android.com/reference/android/os/AsyncTask.html

編集 履歴 (0)
  • 初めて知りました、ありがとうございます。検索してみましたが、やはりキャンセルのフラグを確認するしかないようですね。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。