【发布时间】:2013-09-10 13:11:43
【问题描述】:
我正在制作一个在其 onCreate 中包含 MainActivity 的 Android 应用程序,检查它是否必须下载文件。检查发生在 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));
}
}
【问题讨论】:
-
我不明白你的意思吗?更清楚
-
当你从其他活动回来时 onResume() 将被调用,而不是 onCreate()
-
如果重新创建了初始活动,也可以调用 onCreate。
-
你看到
savedInstanceState参数了吗?谷歌它并使用它:) -
您可以将“下载文件”的状态保存在共享首选项/SaveInstance 包中,并可以使用它来启动异步任务。当活动 1 再次创建时,您可以使用 shared-pref/SavedInstance Bundle 来避免再次运行异步任务。希望这是您所要求的。
标签: android android-activity android-fragments android-actionbar