2016-09-21 20 views
1

デバッガの動作を知りたいので、以下の例を作成し、以下のコード行にブレークポイントを設定しました。私はデバッガを走らせたとき、私は、バーベールの値 " "を画面に表示することを期待しましたが、実際には何も起こりませんでした。変数の値がデバッガで表示されない

なぜ変数 "a" TextView "this.mTV2"を使用して画面に表示されますか?

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    this.mTV1 = (TextView) findViewById(R.id.tv1); 
    this.mTV2 = (TextView) findViewById(R.id.tv2); 
    this.mTV3 = (TextView) findViewById(R.id.tv3); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 

    int a, b, c; 
    int x = 30; 
    int y = 40; 
    int z = 50; 

    a = x + y; 
    b = y + z; 
    c = x + z; 

    this.mTV1.setText("" + a); 
    this.mTV2.setText("" + b);//BREAKING POINT HERE 
    this.mTV3.setText("" + c); 
} 
+0

を助けた希望は、おそらく関係ありませんが、ちょうど試みのために、あなたはすべてのonCreate内のコードを置くことができますか?また、activity_mainのxmlを提供できますか? –

+0

"a"を踏んで値をチェックしても何も表示されませんでしたか?またはnull? – Danieboy

+1

必ずしもそうではありませんが、OnResumeメソッドが実行されているときに画面が描画されないと思いますが、OnResumeが終了しても表示されません。 – Cruces

答えて

1

は、私はこれを説明しよう:

次の画像を見ている場合は、それがAndroidのライフサイクルを示しています。ご覧のとおり、アクティビティはonCreateとonPauseの後に実行されます。つまり、これらのメソッドにブレークポイントを設定しても、レイアウトがまだ更新されていないため画面に何も表示されません。

デバッガでは、変数の値は表示されますが、値は表示されません。

enter image description here

デバッガの有用性は、コードではなく、レイアウトをデバッグしているためデバッグ画面テキスト上のユーティリティはありません。

レイアウトをデバッグする場合は、アクション(ボタンクリックなど)にメソッドを作成し、このメソッドをデバッグするしかありません。

UIは既に描画されているので、テキストが更新されているのがわかりますが、前にも述べたように、レイアウトの更新を見ている間はユーティリティはありません。で。

1

onResumeの間に端末を停止しました。この時点では、実際には何も描画されていません。代わりに、テキスト値を設定しています。この関数が完了すると、UIが再描画され、変更が表示されます。これは、ほとんどのUI開発コードが行う最適化です。

+0

ok..whenまたはどこに折れ点を追加しますか – user2121

0

すべてのビューは、アクティビティライフサイクルメソッドが完了したとき、つまりonCreate、onStart、onResumeのときにスクリーンに表示されます。 onResume内でデバッグしている間、デバイスは停止します。 onResumeが完了すると、既に描画されていればビューが再描画され、結果を見ることができます。

+0

ok..whenまたはどこに折点を追加する必要がありますか? – user2121

+0

デバッガを停止する場所にブレークポイントを置く必要があります実行し、コードをステップバイステップで処理するか、次のブレークポイントに直接ジャンプするのを待ちます。ブレークポイントはコードの実行を終了しません。ライフサイクルメソッドが完了すると、結果を確認することができます。 – Nishith

関連する問題