问题很可能是您在与所有正在完成的工作相同的线程中运行启动画面(我假设是某种对话框,例如ProgressDialog )。这将防止启动屏幕的视图被更新,这甚至可以防止它显示到屏幕上。您需要显示启动画面,启动AsyncTask实例以下载所有数据,然后在任务完成后隐藏启动画面。
因此,您的 Activity 的 onCreate() 方法将简单地创建一个 ProgressDialog 并显示它。然后创建 AsyncTask 并启动它。我会让 AsyncTask 成为主 Activity 的内部类,因此它可以将下载的数据存储到 Activity 中的某个变量中,并在其 onPostExecute() 方法中关闭 ProgressDialog。
不知道如何在不显示代码的情况下再详细说明,所以这里是:
public class MyActivity extends Activity {
private ProgressDialog pd = null;
private Object data = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Show the ProgressDialog on this thread
this.pd = ProgressDialog.show(this, "Working..", "Downloading Data...", true, false);
// Start a new thread that will download all the data
new DownloadTask().execute("Any parameters my download task needs here");
}
private class DownloadTask extends AsyncTask<String, Void, Object> {
protected Object doInBackground(String... args) {
Log.i("MyApp", "Background thread starting");
// This is where you would do all the work of downloading your data
return "replace this with your data object";
}
protected void onPostExecute(Object result) {
// Pass the result data back to the main activity
MyActivity.this.data = result;
if (MyActivity.this.pd != null) {
MyActivity.this.pd.dismiss();
}
}
}
}
显然,您需要在那里填写一些内容,但是这段代码应该可以运行并为您提供一个很好的起点(如果有代码错误,请原谅我,因为我正在输入这个,所以我无法访问 Android SDK目前)。
可以在此处和此处找到有关 Android 中 AsyncTasks 主题的更多好读物。