【发布时间】:2019-06-29 13:35:07
【问题描述】:
以下代码来自 Head First Android。这是一个秒表应用程序。
我对以下代码有几个问题:
- 代码运行如下 -> OnCreate -> runTimer() (跳过 handler.post()) -> OnStart -> onResume -> 回到 handler.post()。
为什么它首先跳过hander.post()?
- 我有两个 textView.setText()。但是第一个不起作用。它总是最后一个。我放第二个只是为了看看代码在 postDelay() 方法之后做了什么。
为什么第一个不起作用?我期待文本从“hello”来回跳转到“hh:mm:ss”。
- 那么在 postdelay() 执行后的 1 秒延迟期间究竟发生了什么。
代码是否开始正常运行,并在 1 秒时调用 postDelay()?
-
为什么在 postDealy(this, 100) 中使用 this。不应该是
this.run()吗?public class MainActivity extends AppCompatActivity { private boolean running = false; private int counter = 0; private Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); runTimer(); } public void onClickStart(View view){ running = true; } public void runTimer(){ final TextView textView = findViewById(R.id.timer); handler.post(new Runnable() { @Override public void run() { int hours = counter/3600; int minutes = (counter%3600)/60; int secs = counter%60; String time = String.format("%d:%02d:%02d", hours, minutes, secs); textView.setText(time); // Doesn't set it to this - see last line if(running){ counter++; } handler.postDelayed(this,1000); // what does happens between next one second textView.setText("hell0"); // Always set it to this } }); }
【问题讨论】:
标签: android android-activity textview android-handler