当我开始我的一项活动时,我希望它能够访问多个网页并从那里下载东西(包括约8000行Json)。所有这些代码都需要一段时间。目前代码都是这样的。在gui中加载代码
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_loading_mods);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
getActionBar().setDisplayHomeAsUpEnabled(true);
}
// gets ad from google
AdView adView = (AdView) this.findViewById(R.id.ad);
adView.loadAd(new AdRequest());
// prepare for a progress bar dialog
bar = (ProgressBar) (this.findViewById(R.id.progressBar1));
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
bar.setMinimumWidth((width/5 * 2));
bar.setMax(3);
bar.setVisibility(View.VISIBLE);
TextView text = (TextView) findViewById(R.id.toMods);
text.setText("Checking for updates...");
UpdateChecker update = new UpdateChecker();
update.execute(getBaseContext());
try
{
if (update.get() == true)
{
bar.setMax(5);
text.setText("Downloading update..");
UpdateMods updater = new UpdateMods();
updater.execute(getBaseContext());
}
}
catch (InterruptedException e)
{
e.printStackTrace();
}
catch (ExecutionException e)
{
e.printStackTrace();
}
}
现在的问题是,它需要一个很长的时间去桂露面,即使(据我所知)这是text.setText(“检查更新...”之后完成) 但是,gui实际上并没有显示出来,直到它在text.setText(“Downloading update ..”)行之后。 当我搜索一个有关如何做一些更多的信息,我发现这个图片: http://developer.android.com/images/activity_lifecycle.png
我几乎知道,我不希望它在运行的onCreate,因为这将需要很长时间才能拿到GUI。 onStart或onResume也不可能,因为我不希望它每次开始活动时下载8000+行文件。
那么我应该在哪里运行此代码? (UpdateChecker和UpdateMods为2个ASyncTasks)
如果你在你的Activity类中定义了你的AsyncTask,那么你可以更新你的gui,当onPostExecute被AsyncTask调用时 – edoardotognoni 2013-04-30 15:06:18
如果你在执行后立即立即调用get(),那么asynctask有什么意义? – njzk2 2013-04-30 15:28:25
我无法将任何一个ASyncs的代码放置在Activity代码中,因为它使用的URL不能在主线程中完成,并且必须位于ASync中。 – Wuppy29 2013-04-30 19:21:22