2013-12-04 4 views
0

Я прочитал много вопросов относительно этого только, но не могу найти правильное решение ... Проблема в том, что я создал манекен AsyncTask, и пока он работает, я поворачиваю экран и останавливает AsyncTask резко.AyncTask останавливается, если экран вращается

Так я не смог сохранить свое состояние таким образом, что, когда экран вращается возобновляется из этого состояния только

Я не могу использовать это решение, как я не использую фрагмент: - http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

Также , я не хочу никакого решения поговорки, что заблокировать ориентацию экрана в то время как асинхронный работают

public class MainActivity extends Activity{ 
     //Some Code 
     ProgressDialog progressDialog; // Global Variable 
     //OnCreateMethod Here 
     //....... 
     @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     DummyTask dt = new DummyTask(); 
     dt.execute(); 
     } 
     private class DummyTask extends AsyncTask<Void, Integer, Void> { 

    @Override 
    protected void onPreExecute() { 
     progressDialog = new ProgressDialog(context); 
      progressDialog.setTitle("Processing..."); 
      progressDialog.setMessage("Please wait."); 
      progressDialog.setCancelable(false); 
      progressDialog.setIndeterminate(true); 
      progressDialog.show(); 
    } 


    @Override 
    protected Void doInBackground(Void... ignore) { 
     try{ 
      Thread.sleep(3000); 
     } 
     catch(Exception e){} 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void ignore) { 
     if (progressDialog!=null) { 
    pd.dismiss(); 


    } 
     Toast.makeText(getApplicationContext(),"Running",Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

использовать IntentService то ...! & используйте Messenger для обновления содержимого пользовательского интерфейса. –

+0

Затем используйте услугу – ramaral

+0

Я использовал AsyncTasks, которые не останавливаются во время вращения ... можете ли вы показать код, который вы используете в AsyncTask? Вероятно, вы ссылаетесь на объект, который уничтожается из-за поворота ... – DigCamara

ответ

1

Есть несколько способов работы с AsyncTask и изменениями конфигурации. Я бы сказал, что вы в принципе есть два варианта: (т. Е ваш Activity проходит через разрушающие события жизненного цикла)

  1. При обнаружении изменения конфигурации вы отмените AsyncTask и перезапускает их, когда новый Activity получает создан
  2. Вы можете отсоединить и прикрепить его с помощью сохранить конфигурацию

См CommonsWare пример # 2 здесь: https://github.com/commonsguy/cw-android/blob/master/Rotation/RotationAsync/src/com/commonsware/android/rotation/async/RotationAsync.java

+0

Отмена этого и повторное создание снова не является вариантом, потому что я буду запускать службы со многими параметрами, и перезапуск их займет много времени. Обязательно проверьте ссылки –

+0

Upvote- Эта ссылка может помочь. Это выглядит многообещающе. Спасибо –

+0

Затем посмотрите на этот второй вариант, он будет поддерживать выполнение заданий. Но в зависимости от того, что вам нужно сделать, я предлагаю вам вместо этого использовать «Сервис» и ** в этой службе ** использовать «AsyncTask» для выполнения вашей работы. – Mike

0

в зависимости от ваших требований, используя Service может быть лучше реализация:

public class DownloaderService extends Service { 

    private LongRunningAsyncTask task = null; 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

     // Start task 
     task = new LongRunningAsyncTask(); 
     task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 

    } 

} 

И вы можете начать свой Service от вашего Activity:

Intent intent = new Intent(this, DownloaderService.class);  
startService(intent); 

Вы можете даже назвать StartService несколько раз, и это всегда будет идти к тому же DownloaderService инстанции. Поэтому убедитесь, что вы не запустили AsyncTask, если он уже запущен. И один из способов общения с любыми Activity вы можете использовать трансляции.

Кроме того, даже если вы не используете Service, убедитесь, что вы понимаете, как разные версии Android выполняются AsyncTask. Пожалуйста, почитайте об этом:

Смежные вопросы