2017-07-20 4 views
0

なぜアクティビティは、セクレテームオブジェクトの最初のビューをFramelayoutに表示しませんが、10秒間待ってMainWindowのみを表示します。フレームレートでは?アクティビティがFramelayoutの最初のビューを表示しないのに、10秒待ってからFramelayoutに表示するのはなぜですか?

private FrameLayout frameLayout = null;ここで明確にする

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    frameLayout = new FrameLayout(getApplicationContext()); 
    setContentView(frameLayout); 
    SexDom sexDom = new SexDom(getApplicationContext()); 
    MainWindow mainWindow = new MainWindow(getApplicationContext()); 
    frameLayout.addView(sexDom.getView()); 

    SystemClock.sleep(10000); 

    frameLayout.removeAllViews(); 
    frameLayout.addView(mainWindow.getView()); 
} 

答えて

0

まず最初は、ここでは、onCreateは、アクティビティビューを作成するためのタスクを持っていることを見つけることができますactivity lifecycle.ですが、onStartが呼び出されるまで、活動は表示されません。ここから、システムのビジー状態を維持する長い処理タスク(SystemClock.sleep(10000)など)は、この方法では良くないことが推測できます(これはMainThreadで実行されるすべてのメソッドに一般化できます)。これは、実際のコンテンツビューの代わりに白い画面が表示されます(長いタスクが終了するまで)。

基本的に、あなたはこのような何か欲しかっ:

1. The activity is created and displayed 
2. Add the first view 
3. Wait for 10 seconds 
4. First view is removed 
5. And then add the second view 

をしかし、このようなものになってしまった:

1. The activity is created 
2. Add the first view 
3. Wait for 10 seconds 
4. Remove first view 
5. Add the second view 
6. Activity is finished creating 
7. Activity is displayed with second view by default 
ここで重要なのは、 MainThreadが相互作用することなく、アクティビティの作成を継続させることです

それと。特定の遅延の後にそれらのビューを切り替えたい場合は、Handlerを使用できます。

new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     frameLayout.removeAllViews(); 
     frameLayout.addView(mainWindow); 
    } 
}, 10000); 
関連する問題