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);
}
}
上記の例でonCreate()の前に実行される場合は、無限ループは作成されず、onCreate()が完了するように制限されますか? –
@gourav: "上記の例でonCreate()の前に実行されるかどうか" - そうではありません。私が書いたように、 'onCreate()'メソッドが返ってくるといつか実行されます。 – CommonsWare
オハイオ州私はちょうどそれを誤解を持って、感謝@ CommonsWare –