2016-09-21 73 views
1

我想了解调试器是如何工作的,所以我创建了下面的示例,并在代码中提到的下面一行放置了一个断点。当我运行调试器时,我希望仅在屏幕上看到varibale“a” 的值,但实际发生的是什么都没有显示出来变量的值不通过调试器显示

为什么变量“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

上有调试屏幕文本无市,因为调试程序的效用正在调试代码,而不是布局。

如果您仍然想调试布局,您唯一的方法就是在动作(例如按钮单击)上创建方法并调试此方法。

由于用户界面已经绘制完毕,您将看到文本正在更新,但正如我之前所说的,在查看布局更新时没有实用工具,该点显示的是您要停止的行处的变量值在。

希望有帮助

1

您在onResume期间停止了该设备。此时实际上没有绘制任何东西,而是设置了文本值。此功能完成后,UI将重新绘制,您将看到更改。这是大多数UI开发代码所做的优化。

+0

ok..when或者shouldi添加一个突破点 – user2121

0

当活动生命周期方法完成后,所有视图都将在screene上可见,例如onCreate,onStart,然后onResume。您正在调试onResume时,您的设备已停止。在onResume完成后,如果已经绘制了视图,将会重绘视图并且您将能够看到结果。

+0

ok..when或者我应该增加一个突破点 – user2121

+0

你应该把一个破发点,你要调试器停止执行并等待你一步处理您的代码步,或直接跳转到下一个破发点。断点不会终止您的代码的执行。你将能够看到你的结果,一旦生命周期的方法完成。 – Nishith

相关问题