2012-03-17 20 views
4

非同期タスク内で新しいスレッドを開始することは可能ですか?このような 何か:非同期タスク内で新しいスレッドを開始

public class FirstActivity extends Activity { 

protected ProgressBar progBar; 
protected Intent intent; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    progBar = (ProgressBar)findViewById(R.id.start_progressBar); 
    progBar.setProgress(0); 
    new StartingApp().execute(); 
} 

protected class StartingApp extends AsyncTask<Void, Integer, Void> { 

    int myProgress; 

    @Override 
    protected void onPreExecute() { 
     myProgress = 0; 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 

     while(myProgress<50){ 
      myProgress++; 
      publishProgress(myProgress); 
       SystemClock.sleep(10); 
      } 

     MyRunnableClass mrc = new MyRunnableClass(); 
     mrc.run(); 

     return null;  
    } 

    @Override 
    protected void onPostExecute(Void result){ 

     intent = new Intent(FirstActivity.this, SecondActivity.class); 
     startActivity(intent); 
    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 

     progBar.setProgress(values[0]); 
    } 
} 
} 

MyRunnableClass Runnableを実装するクラスです。 最初のアクティビティでは、アプリケーションが初期化中(データ構造を埋める、スレッドを開始する)に進行状況バーを表示したいので、このようなものが必要です。

私が持っているもう1つの質問は、run()メソッドまたはstart()メソッドを使用する必要がありますか?

ありがとうございます!

+1

'Runnable'を' run() 'するだけでは新しいスレッドは作成されません。 '(new Thread(mrc))。start();'を実行する必要がありますが、それは可能ですが、なぜスレッド内にスレッドを入れたいのですか? – zapl

+0

あなたは進歩がありません。あなたは進歩を模擬しているだけです。おそらく、不確定なプログレスバーを使うべきでしょう。 – 207

+0

@zaplだから 'Runnable'クラスに' run() 'や' start() 'を使うと、私は正確に何をしていますか?私の考えは、AsnycTaskを使用して、アプリケーションのライフサイクル中に使用されたワーカースレッドを開始し、次のアクティビティに変更することでした... – amp

答えて

0

なぜそれをしたいですか? コードで指摘されているように、新しいスレッド(mrc).start()を呼び出して動作させる必要があります。それ以外の場合は、そのコードで新しいスレッドを生成する問題はありません。

+0

ザッププが言ったように、それはこのようにすべきです...ありがとう! – amp

関連する問題