• ベストアンサー

Android の Looper

new Handler().getLooper() ←Handlerを生成したスレッドのLooper Looper.myLooper() ←これは何のLooperですか? Looper.getMainLooper() ←これはUIスレッドのLooper Looper.myLooper() はAndroid Developersの説明では現在のスレッドに関連付けられているLooperオブジェクトを返しますとなっています。現在のスレッドと言うのはLooper.myLooper() を呼び出したスレッドのことでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

>UIスレッドのルーパーは自動的に作成され、他のスレッドは自分でLooperを作成しなければならないということでしょうか? そのとおりです。 ちなみに「HandlerThread」は「Looper」が標準装備されているようです、「HandlerThread」以外にも「Looper」が標準装備されているものがあるようです。

takahasi5634
質問者

補足

回答ありがとうございました。

その他の回答 (3)

回答No.3

>回答No.2 amanojaku1 >逆に言うと、「Handler」はスレッド毎に個別に「Handler」インスタンスを生成する必要があると言う事かもしれません。 実際に「Thread」内で「Handler」に「Looper.getMainLooper()」を設定した「Handler」の「post()」メッソッドで「View」コンポーネントを渡してやると、「View」コンポーンエントが正常に表示されました(UIスレッドは自動的に受け取ってくれるので、実際の受け取り処理は どうなっているのか分かりませんが)。

回答No.2

>回答No.1 amanojaku1 良く分かりませんが >HandlerThreadとHandlerとLooperの関係Add Star >http://d.hatena.ne.jp/kaw0909/20110410/1302418486 > >>newされたスレッドのlooperに対してメッセージをsendしていた > >↑良く分かりませんが、「Looper」インスタンスはスレッド間通信の相手側と言う事らしいです。 逆に言うと、「Handler」はスレッド毎に個別に「Handler」インスタンスを生成する必要があると言う事かもしれません。 自分のプログラムを見直してみると、そんな事してませんでしたが…(^_^;)

takahasi5634
質問者

補足

回答ありがとうございます。何でこんな質問をしたのかと言うと Looper.myLooper() がnullを返しまして、自分としてはLooperはThreadごとにあると思っていたのでなんだろうと思いました。UIスレッドのルーパーは自動的に作成され、他のスレッドは自分でLooperを作成しなければならないということでしょうか?

回答No.1

良く分かりませんが >現在のスレッドと言うのはLooper.myLooper() を呼び出したスレッドのことでしょうか? 恐らく そうでしょう。 >new Handler().getLooper() ←Handlerを生成したスレッドのLooper 「Handler」コンストラクターに引数が設定されてない場合は そのようですが、引数が設定されている場合は違います(下記参照)。 任意のスレッドの「Handler」に他のスレッド「Looper」を設定できるようです(下記はメイン・スレッドの「Looper」を設定しています。) 例.Handler handler = new Handler(Looper.getMainLooper()); HandlerThreadとHandlerとLooperの関係Add Star http://d.hatena.ne.jp/kaw0909/20110410/1302418486 >newされたスレッドのlooperに対してメッセージをsendしていた ↑良く分かりませんが、「Looper」インスタンスはスレッド間通信の相手側と言う事らしいです。 《参考》 Androidのバックグラウンドを使いこなす Thread, Looper, Handler https://academy.realm.io/jp/posts/android-thread-looper-handler/ Handler と Looper http://mixi-inc.github.io/AndroidTraining/fundamentals/2.12.handler-and-looper.html

関連するQ&A

  • Android super.onCreate(sa

    Androidで、アクティビティオブジェクトを生成している箇所(new Activity?)を見たいのですが、 どこで生成しているのでしょうか? ネットを見たら、 super.onCreate(savedInstanceState);で、画面オブジェクトを作成、て書いてあったのですが、 ここで言う.onCreateは、 ▽Activity | Android Developers   http://developer.android.com/intl/ja/reference/android/app/Activity.html#onCreate(android.os.Bundle) のことでしょうか? 見方が分からないのですが、このメソッドで、画面オブジェクトを生成しているのでしょうか? それとも、コンストラクタか何かで、画面オブジェクトを生成しているのでしょうか? それは、どこに書いてあるのでしょうか?

    • ベストアンサー
    • Java
  • 「UIスレッド」「マルチスレッド」の違い

    Androidで、「UIスレッド」「マルチスレッド」の違い、を教えてください。 ■下記理解で合ってるでしょうか? Androidは、「シングルスレッド」の「UIスレッド」モデルなので、それを「マルチスレッド」で動かそうとすると、「ワーカースレッド」で処理する必要がある ・「マルチスレッド」=「マルチタスク」? ・「UIスレッド」とは、メインスレッドが「GUI (グラフィカルユーザーインターフェイス) 処理」を行うものを指す? ・つまり、「Android」=「UIスレッド」? ・「UIスレッド」って何の用語? Androidに特化した用語? それともJAVAの用語? あるいはそれ以外?

    • ベストアンサー
    • Java
  • Androidイベントリスナ、イベントハンドラ違い

    Androidににおける「イベントリスナ」「イベントハンドラ」の違いを教えてください ・イベントに対応するメソッドが、「View クラスのインターフェイス」「View クラス」に分かれている理由が分かりません ・なぜメソッドによって、「インターフェイス」にあったり、「クラス」にあったりするのでしょうか? ・「onKeyDown」みたいにAndroid 自体が自動検知(?)するイベント対応メソッドは、「View クラス」に書かれる決まり? ・「onClick」などのイベントは、リスナに登録しないと利用できないから(?)、「インターフェイス」に書いてある? ・「イベントリスナ」は、「イベントハンドラ」の一種類なのでしょうか? ▽6.5 UIイベントハンドリング - ソフトウェア技術ドキュメントを勝手に翻訳   https://sites.google.com/a/techdoctranslator.com/jp/android/guide/ui/ui-events#EventHandlers

    • ベストアンサー
    • Java
  • hashCode

    ObjectのhashCodeはどういう規則で生成されているのでしょうか? あるオブジェクトにおいて、オブジェクトの生成順番が実行毎に同じならばhashCodeは同一になるかと思っていたのですが、どうも違うようなので気になりました。 例えば、マルチスレッドでObjectの生成順序を毎回違うよう生成しても、ob配列ojbs1,objs2中の要素のhashCode()は同じになります。 public class HashCodeMultiThreadTest {  public static void main(String[] args) {   final Object[] objs1 = new Object[20];   final Object[] objs2 = new Object[20];   int one_or_two = (int) (Math.random()*2+1);   final long sleep_time1 = 100 * one_or_two;   final long sleep_time2 = 100 * (3-one_or_two);      Thread t1 = new Thread() {    public void run() { try{     for (int i=0; i<objs1.length; i++) {      objs1[i] = new Object();      Thread.sleep(sleep_time1);     }    }catch(Exception e){}}   };   Thread t2 = new Thread() {    public void run() { try {     for (int i=0; i<objs2.length; i++) {      objs2[i] = new Object();      Thread.sleep(sleep_time2);     }    }catch(Exception e){}}   };   try {    t1.start();    t2.start();    t1.join();    t2.join();   }catch(Exception e){}   for (Object o : objs2)    System.out.println(o.hashCode());  } }

    • ベストアンサー
    • Java
  • androidのintentの使い方

    // //問題:LISTを押すと、エラーが出る、Intentの問題ですか? // public class FirstActivity extends Activity { // onCreateメソッド(画面初期表示イベントハンドラ) private static final String TAG ="[HelloWorld]"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);// スーパークラスのonCreateメソッド呼び出し setContentView(R.layout.firstlayout);// レイアウト設定ファイルの指定 ListView listview = (ListView) findViewById(R.id.fruitlist); // ListViewオブジェクト取得 listview.setOnItemClickListener(new ListItemClickListener()); // ListViewオブジェクトにクリックリスナーを関連付け } // アイテムクリックリスナー定義 class ListItemClickListener implements OnItemClickListener { public void onItemClick(AdapterView<?> parent, View view, int position, long id) {// onItemClickメソッド(値選択時イベントハンドラ) ListView listview = (ListView) parent; // ListViewオブジェクト取得 String item = (String) listview.getItemAtPosition(position);// 選択された値取得 Log.d(item, TAG); Intent intent = new Intent(FirstActivity.this,SecondActivity.class);// インテントの生成(呼び出すクラスの指定) startActivity(intent);// 次のアクティビティの起動 } } } -------------------------------------------------------------------------- public class SecondActivity extends Activity { // onCreateメソッド(画面初期表示イベントハンドラ) @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // スーパークラスのonCreateメソッド呼び出し setContentView(R.layout.main);// レイアウト設定ファイルの指定 } }

    • ベストアンサー
    • Java
  • Java ファイルオブジェクトでなく文字列オブジェクト?

    JavaでXMLをパースするプログラムを初めて試しています。 parseメソッドの第一引数がファイルオブジェクトなのですが、これをメモリ(文字列)オブジェクトを与えて同じ動作させるものはあるのでしょうか? // SAXパーサーファクトリを生成 SAXParserFactory spfactory = SAXParserFactory.newInstance(); // SAXパーサーを生成 SAXParser parser = spfactory.newSAXParser(); // XMLファイルを指定されたデフォルトハンドラーで処理します parser.parse(new File("helloworld.xml"), new InsXMLParser()); ※このように String str = "<xml? ......"; parser.XXXXXX(str, new InsXMLParser

    • ベストアンサー
    • XML
  • androidアプリ バージョンによるエラー?

    androidアプリ開発初心者です。 指定した時間ごとに壁紙を自動的に変えるアプリを作っています。 エミュレータでアプリを実行したとき、大体のバージョンでなら正常に動くんですが、 エミュレータのバージョンを2.0にするとアプリ起動時に「xxx.xxxx.xxxxが予期せず停止しました」というエラーが出ます。 また実機でテストを行いましたが、 バージョン2.3.5のau c01では正常に起動したものの、 同じくバージョン2.3.5のdocomo F-05Dでは2.0のエミュレータで実行した場合と 同じエラーが出てしまいます。 この場合原因はどんなことが考えられますか? java自体ほとんど初心者なので困り果てています。エラーログの読み方も分かりません。 よろしくお願いします。 【正常に起動が確認できたもの】 1.6(エミュ)、2.3.3(エミュ)、2.3.5(C01)、4.0.3(エミュ) 【エラーが発生したもの】 2.0(エミュ)、2.3.5(F-05D) 【エラー発生時のログ】 03-13 21:19:31.020: D/ddm-heap(222): Got feature list request 03-13 21:19:32.261: W/ResourceType(222): Failure getting entry for 0x7f02000b (t=1 e=11) in package 0: 0xffffffb5 03-13 21:19:32.302: D/AndroidRuntime(222): Shutting down VM 03-13 21:19:32.302: W/dalvikvm(222): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 03-13 21:19:32.302: E/AndroidRuntime(222): Uncaught handler: thread main exiting due to uncaught exception 03-13 21:19:32.351: E/AndroidRuntime(222): java.lang.NullPointerException 03-13 21:19:32.351: E/AndroidRuntime(222): at my.withk.ImageUtils.resizeBitmapToDisplaySize(ImageUtils.java:14) 03-13 21:19:32.351: E/AndroidRuntime(222): at my.withk.WithkemonoActivity.setwall(WithkemonoActivity.java:111) 03-13 21:19:32.351: E/AndroidRuntime(222): at my.withk.WithkemonoActivity$1.handleMessage(WithkemonoActivity.java:155) 03-13 21:19:32.351: E/AndroidRuntime(222): at android.os.Handler.dispatchMessage(Handler.java:99) 03-13 21:19:32.351: E/AndroidRuntime(222): at android.os.Looper.loop(Looper.java:123) 03-13 21:19:32.351: E/AndroidRuntime(222): at android.app.ActivityThread.main(ActivityThread.java:4310) 03-13 21:19:32.351: E/AndroidRuntime(222): at java.lang.reflect.Method.invokeNative(Native Method) 03-13 21:19:32.351: E/AndroidRuntime(222): at java.lang.reflect.Method.invoke(Method.java:521) 03-13 21:19:32.351: E/AndroidRuntime(222): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 03-13 21:19:32.351: E/AndroidRuntime(222): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 03-13 21:19:32.351: E/AndroidRuntime(222): at dalvik.system.NativeStart.main(Native Method) 03-13 21:19:32.391: I/dalvikvm(222): threadid=7: reacting to signal 3 03-13 21:19:32.411: I/dalvikvm(222): Wrote stack trace to '/data/anr/traces.txt'

  • インスタンスとオブジェクト 生成

    クラスのオブジェクトを生成するときに(newをつかって) ●インスタンスを生成する。 ●オブジェクトを生成する。 と参考書に書いてありますが、言い方はどちらでもいいそうです。 でも、2種類の言い方がるということは厳密には意味が違うような気がするのですが、皆さんはどう思いますか? またどちらの言い方を使っていますか? どちらが正しいのでしょうか?

    • ベストアンサー
    • Java
  • new Date()について。

    new Date()について。 newは予約語で、始めからDateというオブジェクトはwindowのようにブラウザを起動する際に一緒に準備されていないので、 それらの組み込みオブジェクトを使う場合、newを使って次のようにオブジェクトを生成するときいたのですが、 生成とはもともと存在しないものを作るということなのでしょうか? ただそれですと矛盾するので、始めから存在するdateオブジェクトを使えるように準備する作業がnew オブジェクト名()という 式ということなのでしょうか? 始めから使えないオブジェクトを使えるように準備する方法がnew オブジェクト名()と丸暗記するしかないのでしょうか? そもそもなんでnewなんですかね? jsの話です

  • クラスのインスタンスの生成

    javaの勉強を始めたばかりの初心者です。 クラスのオブジェクトの生成方法は(1)の方法だけだと思っていたのですが, 本を読んでいると以下の(1)~(3)の3種類の生成の方法がでてきます。 オブジェクトの生成方法について以下の質問にお答えいただきたいです。 【質問1】 (2)のオブジェクトの生成方法は以下のような考え方でしょうか? BufferedReader br = new BufferedReader(); InputStreamRader k = InputStream(); BufferedRader br = new BufferdRader(k); これを省略して・・・ BufferedReader br = new BufferedReader(new InputStreamReader ()); 【質問2】 (3)のオブジェクト生成方法は以下の考え方でしょうか Container ct = new Container(); ct = frame.getContentPane(); これを省略して・・・・ Container ct = frame.getContentPane(); 【質問3】 オブジェクト生成方法はこの3種類の他にもあるのでしょうか 【質問4】 (1)~(3)の方法には使い分け(ルール)があるのでしょうか? 例えば「このクラスの場合この方法」というような -------------------------------------------------------------------- (1)MyClass br = new MyClass();   クラス名 オブジェクト = new コンストラクタ; -------------------------------------------------------------------- (2)BufferedReader br = new BufferedReader(new InputStreamReader ()); -------------------------------------------------------------------- (3)Container ct = frame.getContentPane(); --------------------------------------------------------------------

    • ベストアンサー
    • Java

専門家に質問してみよう