Android UIスレッド操作まとめも

Androidアプリに埋め込む配布用のSDKを作っていて、メインアプリになるべく影響ない作りにしたいと思って開発しており、ネックになった部分を整理したいのでまとめも!
(javaはじめたばっかりなので、なんでもご指摘くださいm(_ _;)m)

上記の通り、メインアプリに影響をなるべくなくすために何をしたらいいか考えたみた結果、
SDKの処理は非同期でやることにした。 (jarファイルで配布する予定)
今回はUIの操作も必要なので、方法として2点あるようだ・・・(かな?

HandlerThreadを扱う方法とAsyncTaskを使う方法があるようで。
AndroidではUIの処理はシングルスレッドで、別タスクから処理は、そのシングルスレッドにジョブ登録するように利用する必要があるとの事。
AsyncTaskを使う場合は、メインのシングルスレッドにジョブを投げるよう意識する必要はないみたいですが。

 

■HandlerでUIスレッド(シングルスレッド)にジョブをpostするパターン

下記記事を参考にさせていただきました!ありがとうございます!
http://pentan.info/android/app/handler.html
http://www.adamrocker.com/blog/261/what-is-the-handler-in-android.html

UIスレッド操作はメインのスレッド以外から直接操作はできないので、
Handlerを使って、メインスレッドにタスクとしてpostしてあげる。
というのが必要との事。

Handler h= new Handler();

h.post(new Runnable() {
  @Override
  public void run() {
    textView.setText("helloworld!"); //UI操作OK!
  }
});

また、操作方法にはpostDelayedなどを使って一定時間ごとの処理も可能。

 

■AsyncTaskを使うパターン

参考にさせていただいたサイト!ありがとうございます!
http://android.keicode.com/basics/async-asynctask.php
http://labs.techfirm.co.jp/android/cho/1079
http://wikiwiki.jp/android/?AsyncTask%A4%C7%A5%D0%A5%C3%A5%AF%A5%B0%A5%E9%A5%A6%A5%F3%A5%C9%BD%E8%CD%FD%A4%F2%B9%D4%A4%A6

 

new MyAsyncAppTask().execute(api_key);
class MyAsyncTask extends AsyncTask<String, Integer, String[]>{ //
 @Override
 protected void onPreExecute() { 
 //準備処理を書く
 }
@Override
 protected void onProgressUpdate(Integer... values) {
 //進捗状況
 }
@Override
 protected void onCancelled() {
 //キャンセル
 }
@Override
protected String[] doInBackground(String... api_key) {
 //処理を書く※注意ここではUI処理はしない
 return strArr;
 }
@Override
 protected void onPostExecute(String[] str) {
 //処理完了時実行、doInBackgroundの戻り値など使って処理もできる。(UI処理も)
 }
}

 extends AsyncTask<型, 型, 型>
1つ目の型 = excute()の引数の型
2つ目の型 =  onProgressUpdateの引数の型
3つ目の型 = doInBackgroundの引数の型

・onPostExecuteの引数には「…」はいれない。

せっかく調べたので、メモ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください