Android从活动切换

时间:2013-09-10 13:11:44

标签: android android-activity android-fragments android-actionbar

我正在创建一个Android应用,其中MainActivity onCreate 检查是否必须下载文件。检查发生在 AsynchTask 类中。 我有第二个活动PrefsActivity,可以针对偏好启动Prefsfragment

现在当我从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);
}
}

在MainActivity中启动Asynchtask的代码

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));
    }
}

1 个答案:

答案 0 :(得分:0)

在第一个活动中,仅当savedInstance包为空时才创建AsyncTask。这意味着由于配置更改或用户导航回到它(您的情况),不会重新创建活动。类似的东西:

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