2012-03-16 8 views
0

私のアプリには2つのアクティビティがあります。 1つはアプリケーションを最初に起動するときに表示されるリストです。ユーザーがそれを選択すると、2番目のアクティビティがIntentで開始されます。後でインテントから情報を取得し、長い一連の計算を実行します(約20秒)。私の第二の活動がどのように見えるかですここで:しかしsetContentView()は、長いタスクを実行するアクティビティにインターフェイスを表示しません。

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.second_screen); 

    Intent receivedIntent = getIntent(); 
    Bundle MyBundle = receivedIntent.getExtras(); 

    String myName = MyBundle.getString("selected"); 

    /* 
    * Code for long operation here 
    */ 

活動は、私はそれがすべての(?右)onCreate()で行われているためである疑いがある長い操作を完了するまで、ユーザーインターフェイスは表示されません。では、これを解決するにはどうすればよいですか?

答えて

1

まったく!あなたのUIは、onCreate()onStart()の後にのみレンダリングされます。

これを防ぐには、重い持ち上げを他のスレッドに移動する必要があります。AsyncTaskを使用することをお勧めします。

この記事では、AndroidデベロッパーのPainlessスレッディングが、どうやってそれを行うのかを説明しています。 http://developer.android.com/resources/articles/painless-threading.html

+0

あなたの答えをありがとう!しかし、まずインターフェイスをレンダリングしたい場合、いつAsyncTaskを実行するのですか? 'onCreate()'や 'onStart()'では実行することができません。なぜならそれは表示されているインタフェースを遅延させるからです。 – Drider

+0

実際には、表示されているインターフェイスは遅延しません。 UIスレッドの実行中に別のスレッドをロードするだけです。 AsyncTaskでUIを更新する必要がある場合は、 'onPreExecute'を実行するか、タスクの最後にある場合は' onPostExecute'を実行することで、これを行うことができます。 – jcxavier

+0

インターフェイスをレンダリングしたい場合は、コードを 'onCreate()'や 'onStart()'に入れるのではなく、ボタンをクリックしてボタンをクリックして重いコードを実行してください... –

関連する問題