タグ

programmingとHandlerに関するastk_fのブックマーク (5)

  • 【Android】 UIスレッドとは別スレッドからのToastの表示

    2012年 8月 16日(木曜日) 00:00 | 最終更新 2012年 9月 26日(水曜日) 20:23 | 作者: 森 純一 『SQLiteとCursorLoaderの使い方(3/3)』を書いた際に、テスト用に埋め込んだToastがUIスレッド以外のスレッドから呼び出せてしまった。最初はたまたまかと思ったが何度やっても、いろいろと操作していても表示できる。常々、ToastはUIスレッドからしか呼べないと思っていたので、これは非常に不思議でした。 なので、なぜエラーにならずに呼び出せるのか、ちょっと調べてみました。 Toastを表示したスレッドについて まず最初に、今回の現象が起きた別スレッドの処理について調べてみます。 今回の現象は、AsyncQueryHandler という Content Resolver を経由してデータ取得を非同期に行う処理に関連して見つかりました。このAsy

  • Handlerクラスの正しい使い方(Androidでスレッド間通信) - ちくたく

    AndroidのHandlerクラスは別スレッドからUI部品操作を用いる際に、よく使われる。Androidの場合はUIスレッドからでないとUI部品を操作できないという制約がある。どのサイトを見てもUIスレッドへイベントを送るための仕組みとして語られている。 いやいや、それは事実だが、それだけでない。 Handlerクラスはスレッド間通信のための仕組みである。もっと正確に言うと、Handlerインスタンスを生成したスレッドへイベントを送るための仕組みなのである。当たり前だと思う人も多いかもしれないが、多くの人はこのことを理解できていない。 ソースレベルで説明してみる。よく書かれるソースは以下のような感じである。 Handler handler = new Handler(); // (1) handler.post(new Runnable() { @Override public void

    Handlerクラスの正しい使い方(Androidでスレッド間通信) - ちくたく
  • HandlerThread・Handler・Messageの使い方

  • HandlerとMessage - 別スレッドでのGUI操作 - 愚鈍人

    ProgressDialogのサンプルプログラムをながめていたら、Handlerという見なれぬクラスが使われていた。 Handlerクラスて何だろう、と思って調べてみたらすっかりはまってしまった。 他の記事もそうなのだが、今回は特にサンプルコードをもとに推察で書いている部分が多いので、誤りがあればご容赦いただきたい。 動作確認は、きちんとしているつもりであるが。 別スレッドでのGUI操作の問題点 アンドロイドでも、通常のjavaプログラムのようにThreadクラスが使える。 しかし、アンドロイドのGUIはシングルスレッドにしか対応していないため、 ウィジェット等のGUIオブジェクトを生成したスレッドとは別のスレッドから、ウィジェットに直接アクセスする事はできない。 まず次のプログラムを実行して、別スレッドから直接ウィジェットの操作を試みてみる。 このプログラムを実行してボタンを押すと、新し

    HandlerとMessage - 別スレッドでのGUI操作 - 愚鈍人
  • throw Life - AndroidのHandlerとは何か?

    AndroidでWeb APIを使う場合、マルチスレッドによるユーザビリティ向上を以前のエントリで説明しました。 AndroidアプリのUIはシングル・スレッド モデルです。 単純にマルチスレッドにしてUIの操作をしてしまうと、CalledFromWrongThreadExceptionでアプリがダウンしてしまいます。 これを回避する仕組みがHandlerです。 Handlerの仕組みを簡単に説明しようと思ったのですが、 またもや長くなってしまったので、先にまとめます。 AndroidUI操作はシングル・スレッド モデル ユーザビリティ向上の為にはマルチスレッドが必要 Handlerで実現 Handlerを使わない場合に起きる例外は実行スレッドのチェックで発生 Handlerを使うと、UI Threadの持つキューにジョブを登録できる キューはUI Threadにより実行される

  • 1