質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

5589閲覧

android)Handlerと複数のRunnable

navesanta

総合スコア198

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2017/03/31 08:41

時間を遅らす処理を複数行うのにHandlerと複数のRunnableを使っています。質問はHandlerのインスタンスは各Runnable毎に必要なのでしょうか?それともHandlerのインスタンスひとつで複数のRunnableを設定するべきなのでしょうか?試しにHandlerを各Runnable毎にしても、ひとつで複数のRunnableを設定してもどちらも問題なく思った通りの挙動をしますが設計上どちらがベターなのかまた理由があるようでしたら教えて下さい。

各Runnable毎の場合

public

1 2 private Handler mHandler = new Handler(); 3 private Handler sHandler = new Handler(); 4 5 private Runnable updateText; 6 private Runnable subupdateText; 7 8 @Override 9 protected void onCreate(final Bundle savedInstanceState) { 10 super.onCreate(savedInstanceState); 11 setContentView(R.layout.activity_main); 12 13 updateText = new Runnable() { 14 @Override 15 public void run() { 16 TextView text = (TextView)findViewById(R.id.count); 17 Integer count = Integer.valueOf(text.getText().toString()); 18 count++; 19 text.setText(count.toString()); 20 mHandler.removeCallbacks(updateText); 21 mHandler.postDelayed(updateText, 1000); 22 } 23 }; 24 mHandler.postDelayed(updateText, 1000); 25 26 subupdateText = new Runnable() { 27 @Override 28 public void run() { 29 TextView subText = (TextView)findViewById(R.id.subcount); 30 Integer subcount = Integer.valueOf(subText.getText().toString()); 31 subcount++; 32 subText.setText(subcount.toString()); 33 sHandler.removeCallbacks(subupdateText); 34 sHandler.postDelayed(subupdateText, 5000); 35 } 36 }; 37 sHandler.postDelayed(subupdateText, 5000); 38 } 39}

ひとつで複数のRunnableの場合

public

1 2 private Handler mHandler = new Handler(); 3 4 private Runnable updateText; 5 private Runnable subupdateText; 6 7 @Override 8 protected void onCreate(final Bundle savedInstanceState) { 9 super.onCreate(savedInstanceState); 10 setContentView(R.layout.activity_main); 11 12 updateText = new Runnable() { 13 @Override 14 public void run() { 15 TextView text = (TextView)findViewById(R.id.count); 16 Integer count = Integer.valueOf(text.getText().toString()); 17 count++; 18 text.setText(count.toString()); 19 mHandler.removeCallbacks(updateText); 20 mHandler.postDelayed(updateText, 1000); 21 } 22 }; 23 mHandler.postDelayed(updateText, 1000); 24 25 subupdateText = new Runnable() { 26 @Override 27 public void run() { 28 TextView subText = (TextView)findViewById(R.id.subcount); 29 Integer subcount = Integer.valueOf(subText.getText().toString()); 30 subcount++; 31 subText.setText(subcount.toString()); 32 mHandler.removeCallbacks(subupdateText); 33 mHandler.postDelayed(subupdateText, 5000); 34 } 35 }; 36 mHandler.postDelayed(subupdateText, 5000); 37 } 38} 39

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Handlerはインスタンス化したスレッドに依存します、同じスレッドで複数のHandlerをインスタンス化するのは無意味だと思います。

渡すRunnableを全てUIスレッド(画面更新用途)で実行したいなら1つで十分ですね。

投稿2017/03/31 08:48

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

navesanta

2017/04/01 00:28

回答ありがとうございます。わかりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問