我看过:
http://developer.android.com/training/load-data-background/index.html http://www.vogella.com/articles/AndroidServices/article.html#service
并不清楚它是否符合我的目的。听起来你可以让它在另一个线程上执行操作,它会在活动完成后发出警报。
但是如果用户在另一个线程中进行不同的活动(例如,他们点击"返回"并转到上一个屏幕),而数据仍然在另一个线程中传输,会发生什么?原始活动是否仍会更新?任务完成后是否会再次自动显示该活动?
如果我不想做我想做的事情,我不想开始开发此功能,所以我希望有人在这里确认一下。即使用户在数据仍在转移时转到另一个活动,是否可以更新活动?
由于
答案 0 :(得分:1)
我建议您使用AsyncTasks:http://developer.android.com/reference/android/os/AsyncTask.html
但是,如果用户进行不同的活动会发生什么(例如,他们 单击“返回”并转到应用程序中的上一个屏幕 数据仍然在另一个线程中传输?是原来的吗? 活动还在更新?它是否自动显示 任务完成后再次进行活动?
此行为取决于您的活动设计方式。您可以在清单文件上的活动定义上使用属性launchMode,只有一个活动实例,但要小心,因为每次显示活动实例时都会重新创建它(调用onCreate方法)。看看这里:http://developer.android.com/guide/topics/manifest/activity-element.html#lmode
答案 1 :(得分:0)
假设您使用asynctask:
如果您希望在传输数据时将用户保留在单个活动中,则可以显示不可取消的进度条或对话框,或禁用任何将更改活动的视图的单击事件。
如果您想允许用户继续使用该应用程序,您可以创建一个静态布尔变量isUpdating。当asynctask执行时,检查asynctask的on pre execute method中的true / false是否应该继续运行它或取消它。并且在on post execute method中将其设置为false,这样一次只能运行一个实例。
当asynctask运行时,您希望进行所有繁重的计算,httpposts / gets和数据更改,例如更新数据库或在doinbackground method内使用的文件存储。以及onprogressupdate method中对用户界面的所有更改。
我还认为有一种方法可以使异步任务同步,具体取决于你如何初始化它们但却记不清楚。