【问题标题】:when will runnable executed in message queue?runnable 什么时候在消息队列中执行?
【发布时间】:2018-02-23 15:48:48
【问题描述】:

我知道 handler.post() 方法,导致 Runnable r 被添加到消息队列中。 runnable 将在附加此处理程序的线程上运行。

但我的问题是我在 onCreate() 方法中使用了 runtimer()

 public class Stopwatch extends Activity  {
private int seconds;
private boolean Running;
private boolean wasrunning;
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_stopwatch);
 if (savedInstanceState != null){
    seconds = savedInstanceState.getInt("seconds");
    Running = savedInstanceState.getBoolean("running");
    wasrunning = savedInstanceState.getBoolean("wasrunning");
}
    runtimer();
}

public void start(View v)
{
    Running=true;
    wasrunning= true;
}
public void stop(View v)
{
    wasrunning=false;
 Running=false;
}

public void reset(View v){
seconds=0;
Running= false;
    wasrunning=false;
}

void runtimer(){
    final TextView tv = (TextView) findViewById(R.id.text);
final Handler h = new Handler();
h.post( new Runnable(){
@Override
public void run() {
    int hour = seconds / 3600;
    int minutes = (seconds % 3600) / 60;
    int sec = seconds % 60;
    String time = String.format("%02d:%02d:%02d", hour, minutes, sec);
    tv.setText(time);
    if (Running) {
        seconds++;
    }
    h.postDelayed(this,1000);
}
});
}

public void onSaveInstanceState(Bundle savedInstanceState){
    savedInstanceState.putInt("seconds",seconds);
    savedInstanceState.putBoolean("Running",Running);
    savedInstanceState.putBoolean("wasrunning",wasrunning);
}
}

【问题讨论】:

    标签: android


    【解决方案1】:

    消息队列中的runnable在onCreate()方法完成后是否执行

    这将在onCreate() 方法返回之后的某个时间。确切的时间取决于主应用程序线程的消息队列中还有什么以及需要多长时间。

    【讨论】:

    • 如果它会在我上面的示例中的 onCreate() 之前运行,它会不会创建一个无限循环并且会限制 onCreate() 完成??
    • @gourav:“如果它会在我上面的示例中的 onCreate() 之前运行” - 它不会。正如我所写,它将在onCreate() 方法返回后的某个时间运行。
    • 哦,我明白了,我只是误解了,谢谢@CommonsWare
    • runnables 是否总是在发布它们的方法之后运行??
    • @gourav:如果在 Runnable 将运行的同一线程上调用该方法,是的。 onCreate() 在主应用程序线程上调用。您对Handler 的使用将导致在主应用程序线程上调用Runnable。该线程一次只能做一件事。因为当你在post()Runnable 中时你在onCreate() 内部,所以Runnable 需要等待轮到它。
    猜你喜欢
    • 1970-01-01
    • 2013-06-01
    • 2022-10-13
    • 1970-01-01
    • 2023-03-19
    • 2014-01-25
    • 1970-01-01
    • 2017-09-07
    • 2023-04-03
    相关资源
    最近更新 更多