2015-10-05 96 views
4

我想了解Android Activity生命周期。为此,我已经创建,我已经覆盖所有的生命周期方法(的onCreate,在onStart,onRestart,的onResume,在onPause,的onStop,的onDestroy)活动时间:Android - onStart方法有什么问题?

public class SecondActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 
     Log.d("ActivityTutorial", "onCreate"); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     Log.d("ActivityTutorial", "onStart"); 
    } 

    @Override 
    protected void onRestart() { 
     super.onRestart(); 
     Log.d("ActivityTutorial", "onRestart"); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     Log.d("ActivityTutorial", "onResume"); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     Log.d("ActivityTutorial", "onPause"); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     Log.d("ActivityTutorial", "onStop"); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     Log.d("ActivityTutorial", "onDestroy"); 
    } 

} 

我把断点上线,我现在用的日志记录.D(...)。然后我试图调试。 onCreate方法没问题 - 它在创建活动时调用。

奇怪的情况是启动onStart方法。根据Android documentation:“onStart()当活动对用户变得可见时调用。”但是,当我调试时,它涉及onStart方法,但在此Activity上的Button尚不可见。

enter image description here

我认为这应该可以看到的onResume() - 呼吁在onStart()方法后。但按钮不可见。

enter image description here

只有后的onResume方法,按钮是可见的。

enter image description here

所以我的问题是什么是错借助onStart和方法的onResume?也许我正在做的事情不像它应该做的那样?

+0

由于您在onStart()和onResume()中持有断点,因此主线程无法更新UI,因为它正在等待传递断点。这就是你看到这种行为的原因。 – Geek

回答

0

否。onResume()方法使Activity可见。正如你在文档中所说的那样:“onStart()当活动对用户变得可见时调用”。

如果您仔细阅读:“onResume()当活动将开始与用户交互时调用。”

UPDATE:

记住的onResume是不是你 活动是对用户可见的最佳指标;系统窗口(如键盘保护程序 )可能在前面。使用onWindowFocusChanged(boolean)知道某些 您的活动对用户可见(例如,恢复游戏 )。

+0

根据你的回答,onResume方法使活动可见且难以处理。那么在那种情况下,onStart()方法的目的是什么? –

+0

没有任何方法可以保证您的布局可见,请参阅文档说明: “请记住,onResume不是您的活动对用户可见的最佳指示器;系统窗口(如键盘锁)可能在前面,请使用onWindowFocusChanged (boolean)来确定你的活动对用户是可见的(例如,恢复一个游戏)。“ –

+0

我已经更新了我的回答 –

0

井活动将在onResume()方法on onStart()上可见。请参阅android文档和活动生命周期。

0

onStart()方法在Activity Lifecycle中的主要原因是准备好用户的主UI线程。它掌握用户界面的onCreate()方法中分配的值,以及准备好的活动用户界面变得对用户可见。

第二个原因是我们不必在每次调用onStop()方法时创建一个活动。它就像活动生命周期中的一个检查点,可以在不进行额外加载的情况下返回之前的状态。

现在onStart()方法加载非常快,并启动onResume()方法。 onResume()允许用户与UI进行交互。但是正如你所说,在加载onResune()方法之后,你的UI几乎没有什么用处,因为在onStart()方法中无法访问的UI是没用的。如果用户尝试访问不可访问的用户界面但无法执行任何操作,则显示不好的印象。因此,只有在用户可以访问并准备好用户交互时,UI才会变得可见。