2012-03-17 2 views
4

Возможно ли начать новую тему в задаче Async? Что-то вроде этого:Создать новую тему в Async Задача

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. Я хочу что-то вроде этого, потому что в первом действии я хочу показать индикатор выполнения, когда приложение инициализируется (заполняет структуры данных, начальные потоки).

Еще один вопрос, который у меня есть: следует ли использовать метод run() или start()?

Заранее благодарен!

+1

У вас нет новой темы, если вы просто запускаете() 'a' Runnable'. Вы должны сделать '(новый Thread (mrc)). Start();' и да это возможно, но почему вы хотите иметь поток в потоке? – zapl

+0

У вас нет прогресса. Вы просто имитируете прогресс. Возможно, вы должны использовать неопределенный индикатор прогресса. – 207

+0

@zapl Итак, когда я использую 'run()' или 'start()' для класса Runnable', что я делаю точно? Моя идея заключалась в использовании AsnycTask для запуска рабочих потоков, используемых в течение жизненного цикла приложения, а затем перехода к следующей активности ... – amp

ответ

0

Почему вы хотите это сделать? Как указано в коде, вам нужно вызвать новый Thread (mrc) .start(), чтобы он работал. В противном случае я не вижу никаких проблем в этом коде, создавая новый поток.

+0

Как сказал zapl, это должно быть так ... Спасибо! – amp