2017-09-14 10 views
0

私は、handler.post()メソッドが、Runnable rがメッセージキューに追加されることを知っています。実行可能ファイルは、このハンドラが接続されているスレッド上で実行されます。メッセージキューで実行される実行時はいつですか?

私の質問は、onCreate()メソッド内でruntimer()を使用したことです。メッセージキュー内のrunnableは、onCreate()メソッドの完了後に実行されますか?

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); 
} 
} 

答えて

0

は、メッセージキュー内の実行可能それはいつかonCreate()メソッドが戻った後であろう

のonCreate()メソッドの完了後に実行されません。正確にはいつ他のものがメインのアプリケーションスレッドのメッセージキューにあり、それがどれくらい時間がかかるかに依存します。

+0

上記の例でonCreate()の前に実行される場合は、無限ループは作成されず、onCreate()が完了するように制限されますか? –

+0

@gourav: "上記の例でonCreate()の前に実行されるかどうか" - そうではありません。私が書いたように、 'onCreate()'メソッドが返ってくるといつか実行されます。 – CommonsWare

+0

オハイオ州私はちょうどそれを誤解を持って、感謝@ CommonsWare –

関連する問題