1

Я делаю приложение для Android, у которого есть MainActivity в его onCreate проверить, нужно ли загружать файл. Проверка происходит в классе AsynchTask. У меня есть вторая активность PrefsActivity, которая запускает Prefsfragment для получения предпочтений.Android-переход от действий

Теперь, когда я возвращаюсь с PrefsActivity, onCreate выдается снова. Но вся проверка не должна повториться.

код приводит к предпочтениям

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.preferences: 
      Intent intent = new Intent(this, PrefsActivity.class); 
      startActivityForResult(intent, 1); 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

Код для предпочтениям

public class PrefsActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragment()).commit(); 

    ActionBar actionBar = getActionBar(); 
    actionBar.setDisplayHomeAsUpEnabled(true); 
} 
} 

Код для запуска Asynchtask в MainActivity

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    PropertiesManager.getUniqueInstance().loadProperties(PropertiesManager.PROPERTIES_FILE, this); 

    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
    boolean auto_update = sharedPreferences.getBoolean("pref_autoUpdate", true); 
    File downloadFile = getExternalFilesDir("media/" + Downloader.DOWNLOAD_FILE_NAME); 

    if (auto_update || !downloadFile.exists()) { 
     try { 
      if (new Downloader(this).execute().get()) { 
       receiveBroadcast(this); 
      } else { 
       schedule = Parser.getUniqueInstance().parse(this); 
       ScheduleBuilder.getUniqueInstance().build(this, (DayBean) schedule.get(9)); 
      } 
     } catch (InterruptedException ex) { 
      Log.e(TAG, ex.getMessage()); 
     } catch (ExecutionException ex) { 
      Log.e(TAG, ex.getMessage()); 
     } 
    } else { 
     schedule = Parser.getUniqueInstance().parse(this); 
     ScheduleBuilder.getUniqueInstance().build(this, (DayBean) schedule.get(9)); 
    } 
} 
+0

Я не вижу вашу точку зрения? Будьте более ясны –

+0

Когда вы вернетесь из другой активности onResume(), вызывается, а не onCreate() –

+0

onCreate также можно вызвать, если начальная активность была воссоздана. – gunar

ответ

0

В первой деятельности создайте AsyncTask только в том случае, если пакет savedInstance равен NULL. Это означает, что активность не воссоздается из-за изменений конфигурации или из-за того, что пользователь переходит к ней (ваш случай). Что-то вроде:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    if(savedInstanceState == null) { 
     //instantiate the AsyncTask and execute it 
    } 
} 
+0

Я не могу работать. Я создал onsavedinstancestate, чтобы добавить логическое значение. и в oncreate if savedinstancestate == null init a Asynch. но похоже, что сохраненное в нем состояние всегда равно нулю. – HarveyDX

+0

Это ноль, когда вы впервые запускаете свою деятельность. – gunar

+0

есть. но когда я перехожу к активности предпочтений и возвращаюсь с помощью кнопки «вверх» на панели действий, она по-прежнему инициирует асинхронную работу. – HarveyDX

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