2012-02-13 14 views
0

私はレイアウトがたくさんあるゲームを作ったので、アクティビティをロードするのに約15秒かかります。いくつかのレイアウトを最初にロードしてからしばらくして残りのレイアウトをロードする方法があるので、ユーザーはアクティビティ間で黒い画面を表示する必要はありません。レイアウトのレイジー読み込み

答えて

4

スレッドです。スレッドの外にいくつかのレイアウトをロードし、残りのスレッドをスレッドにロードします。 スレッドのサンプルコード。

new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      //write your code here... 
     } 
    }, delay_time); 
+0

run()メソッド内でレイアウト作成メソッドを呼び出すためにコードを使用しましたが、これは以前のものとは異なるANRダイアログを含む私のアプリケーションの速度を落としました。同じことについての説明はありますか? – noob

+0

実行メソッドの外にレイアウトIDを作成しますが、実行メソッドで可視性をVISIBLEとして設定します –

+0

コードが効率的に機能しました。 – noob

1

できるだけ多くのレイアウトを削除することができます。遅延を伴わずにアクティビティを表示したい場合は、いくつかのレイアウトをハードコーディングし、遅れて別のスレッドに追加することができます。

+0

メインスレッドのレイアウトにアクセスできますか?私はそれらを作成したスレッドでUIにアクセスできると思います。 – noob

+0

私はそう思う、今私は新しいビューを追加してAsyncTaskを得て、うまく動作する。 – goodm

1

まあ、遅延初期化は、一般的に、ここでのトリックはif(v == null) v = new View()はあなたが実際に必要なときにだけ表示vを初期化しますその方法は

スニペットということです。この

private View v; 
... 
v.getSomethingUsefullFromView();  

public int getSomethingUsefullFromView() { 
if(v == null) 
    v = new View() 
    jadajada 

return somevalue; 
} 

のようにアーカイブすることができますに。

+0

通常、getメソッドごとに参照するinitFoobarView()もありますが、それは初期化するために必要な作業量によって異なります。 – Rasive

関連する問題