コード public class MainActivity extends Activity implements Runnable{ private Handler mHandler; private FrameLayout frameLayout; TextView tv; int x = 0; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); frameLayout = new FrameLayout(this); setContentView(frameLayout); tv = new TextView(this); tv.setText("a"); tv.setTextColor(Color.RED); frameLayout.addView(tv); mHandler = new Handler(); mHandler.postDelayed(this, 1000); } @Override public void run(){ ・・・☆ tv.setText("b"); mHandler.post(new Runnable() { @Override public void run() { ・・・★ try{ Thread.sleep(1000); } catch(InterruptedException e){ } x++; tv.setText("x は" + x); } }); mHandler.postDelayed(this, 2000); } }
上のプログラムを実行すると
「a」
1秒後
「b」
1秒後
「xは1」
1秒後
「b」
1秒後
「xは2」
1秒後
「b」
1秒後
「xは3」
1秒後
「b」
1秒後
「xは4」
あと繰り返し
というような結果になったのですが
mHandler.postDelayed(this, 2000);
このように2秒後に設定しているのに1秒後という結果になったのはrunメソッド(☆)とrunメソッド(★)が同時に開始されたからだと思うのですが、なぜ同時に開始されたのでしょうか?
またこういう記述はプログラム的に使い方があっているというか、やってはダメな記述なのでしょうか?
ちなみに
mHandler.postDelayed(this, 1000);
とすると
「a」
1秒後
「b」
で止まりずっとbのままでした。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/05 05:14
2016/04/05 08:27