最好下载当前活动中的数据,然后将数据发送到第二个活动,或者将URL发送到第二个活动,然后下载数据。 谢谢
编辑: 我有两个活动: 第一个活动有一个列表视图,因此当您单击一行时,它将带您进入第二个活动。 我想在应用程序下载数据时显示进度对话框,所以我想在第一个活动时显示对话框,然后在下载完成后我将开始第二个活动。实际上我想在第一个活动中下载数据,因为我还想在第二个活动开始之前下载要向用户显示的广告!
答案 0 :(得分:0)
一般来说,选项2更好。但这取决于你的情况。如果您希望第二个活动仅在数据准备就绪时启动,则最好在活动1中下载它。您可以使用意图发送数据。数据需要扩展parcelable(意味着它可以写入磁盘并被解析),因此它可以将其作为额外的意图添加。您还可以将数据保存在静态变量中。
编辑:如果你想下载活动1中的数据,你应该是AsyncTask:http://developer.android.com/reference/android/os/AsyncTask.html
它将在另一个线程中下载数据,因此UI线程不会中断。 AsyncTask提供了一种更新进度的好方法。当用户按下活动1中的列表项时,打开带有进度条的对话框并启动下载数据的异步任务。完成异步任务并下载数据后,将其保存在静态变量中(这是最简单的方法),然后在活动2中使用它。
有关异步任务的更多信息: http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html
编辑2:基本上AsyncTasks有4种主要方法: 在UI线程上调用的onPreExecute()。您可以使用它来启动将显示进度的对话框:
@Override
protected void onPreExecute() {
super.onPreExecute();
ShowDialog();
}
在另一个线程上调用的doInBackground(),这意味着您可以对其执行长操作。在此处下载您的数据。使用publishProgress()发布您的进度。
onProgressUpdate()在UI线程上调用,这意味着您可以像对话框那样与UI工作人员进行通信 - 所以在这里您应该更新其进度:
protected void onProgressUpdate(Integer... progress) {
setDialogProgress(progress[0]);
}
在UI线程上调用的onPostExecute()。数据已下载。开始活动2.将数据保存在静态变量中,或者将其发送到活动2.然后获取活动2中的数据并显示它。
就是这样:))