時間のかかる処理を別スレッドで実行するHTTP通信を別スレッド化するAndroidアプリケーションでスレッドを使う方法はいろいろあるみたいだが、今回は以下の手順で実装した。ActivityクラスでRunnableインターフェースをインプリメントする。android.os.HandlerクラスのインスタンスをActivityクラスで保持する。Runnableのrunメソッドをオーバーライドする。別スレッドでの処理を開始する。ActivityクラスでRunnableインターフェースをインプリメントする。Activityでインプリメントせずに、単にその都度Runnableのインスタンスを生成しても多分大丈夫。こちらの方が多少はメモリの節約になるらしい。(という記述をどこかで読んだ気がする。android.os.HandlerクラスのインスタンスをActivityクラスで保持する。別スレッドでの処理が完了した後にUIスレッド側で実行する処理を受け取る為に必要になる。RunnableのrunメソッドをOverrideする。別スレッドでの処理が完了した後、mHandlerのpost()メソッドを呼んでUIスレッド側で実行したい処理を渡す。変数urlとtitleはfinalで宣言しないとハンドラ内から参照する事が出来ないので注意。逆に言うとfinalで宣言したローカル変数がそのまま参照出来るので、Bundleに詰め込んでパラメータとして渡すなどという方法と比べるとこの書き方はかなり便利だと思う。//処理完了後、ハンドラにUIスレッド側で実行する処理を渡す。//データベースを更新。別スレッドでの処理を開始する。Thread(this).start();実行時のイメージはこんな感じになった。処理中はくるくる回るアイコンを表示しておくと結構いい感じ。クラスの中でtitleがセットされているかどうかで判断して行っている。ネットワーク接続が可能かどうか事前に調べるネットワークに接続されていない場合はタイトルの取得を行わずにURLだけを一覧に追加する様にした。接続されているかどうかの判断は下の関数で可能だ。(著)よりブラウザを自動的に開くかどうかを設定で選べる様にする設定画面にチェックボタンを追加して、インテントで受け取ったURLを自動的にブラウザで開くかどうか設定出来る様にした。ONの場合とOFFの場合で試してみた所、自動的にブラウザを開かずに単に一覧リストを表示するだけの方が使いやすい様な気がする。自動的にブラウザを開く場合にWebサーバーからリダイレクトのレスポンスが返って来ると、標準ブラウザはリダイレクト先のURLを開く為にまたインテントを発行する様になっている。そのインテントを再度このアプリが受け取ると、結局一覧リスト上はURLが微妙に違うだけで内容は同じページ、という行が複数追加されてしまう事になる。http://d.hatena.ne.jp/hogehoge/というサイトを開いて、http://d.hatena.ne.jp/hogehoge/touchにリダイレクトされた場合にこの現象が起きる。「インテントを受け取った時にそれがリダイレクトされて来たものなのかどうか判定してそうであれば無視する。」という動作が出来ればいいのだが、その判定方法が見つからないのでこの方法は今の所実現出来ていない。「時間制限を設けて、前のインテント処理から一定の時間内(20秒とか)は同じタイトルの行を追加しない様にする。」というやり方が考えられる。ややこしくなりそうなのでそこまで実装するのは今回は見送り。今回の全ソースはこちらからダウンロード可能になっている。GitHub他にも「設定画面で標準以外のブラウザを選べる様にする」とか、「ListViewにチェックボックスを付けて処理対象を選択出来るようにする」とか、検討した機能はあった。「メールを送る代わりにどこかのサーバーにデータを送信する」というのも面白そうだ。DocumentsのSpreadsheetに書き込めば意外と使い途があるかも知れない。このアプリを変更するのは今回で一旦ストップしておこうと思う。Readerの「スターを付ける」機能を使えばほぼ達成出来る事に気付いてしまったからだ。ライフハッカー[日本版]情報の収集、閲覧、集約は全てGoogleリーダーに任せることにした。Readerの管理外のURLをPCに送りたい時だけになってしまった。それでも完全に用が無くなった訳ではないのでよしとしよう。それに、他にもっと面白そうな事がたくさんある。次からはSurfaceViewを使ったグラフィック処理や、SoundPoolを使って音を出す事などをやってみようかなと思っている。あと、OpenGLにも興味を惹かれる。何か子供向けの教育アプリでも作れないものかなとこんな本を読んでみたりもしている。(著)簡単なものから始めて少しずつ機能を追加して行く構成になっていて、とても分りやすい。