1

我看过:

http://developer.android.com/training/load-data-background/index.html http://www.vogella.com/articles/AndroidServices/article.html#service

目前还不清楚它是否能达到我的目的。听起来你可以让它在另一个线程上执行操作,一旦完成它就会提醒活动。

但是,如果用户在应用程序中转到不同的活动(例如,他们单击“返回”并转到上一个屏幕),而数据仍在另一个线程中传输,会发生什么?原始活动是否仍会更新?任务完成后是否会再次自动显示该活动?

如果无法做我想做的事情,我不想开始开发这个功能,所以我希望这里有人可以为我确认。即使用户在数据仍在传输时已经进入另一个活动,是否可以更新活动?

谢谢

4

2 回答 2

1

我建议您使用 AsyncTasks:http: //developer.android.com/reference/android/os/AsyncTask.html

但是,如果用户在应用程序中转到不同的活动(例如,他们单击“返回”并转到上一个屏幕),而数据仍在另一个线程中传输,会发生什么?原始活动是否仍会更新?任务完成后是否会再次自动显示该活动?

此行为取决于您设计活动的方式。您可以在清单文件上的活动定义中使用属性 launchMode 以仅拥有一个活动实例,但请注意这一点,因为每次显示活动实例时都会重新创建它(调用 onCreate 方法)。看看这里:http: //developer.android.com/guide/topics/manifest/activity-element.html#lmode

于 2013-10-18T00:45:34.003 回答
0

假设您使用异步任务:

如果您想在数据传输时将用户保持在单个活动中,您可以显示不可取消的进度条或对话框,或禁用任何会更改活动的视图的点击事件。

如果您想允许用户继续使用该应用程序,您可以创建一个静态布尔变量 isUpdating。当 asynctask 执行时,在 asynctask 的on pre execute 方法中检查它的真/假,以确定您应该继续运行它还是取消它。并且在on post execute 方法中将其设置回 false 这样一次只运行一个实例。

当 asynctask 运行时,您希望进行所有繁重的计算、httpposts/gets 和数据更改,例如更新数据库或您在doinbackground 方法中使用的任何文件存储。以及您在onprogressupdate 方法中对 UI 所做的所有更改。

我还认为有一种方法可以使异步任务同步,具体取决于您如何初始化它们,但记不清了。

于 2013-10-18T05:34:17.963 回答