Android 当更新来自后台线程时,如何处理进度条状态
这是一个简单的场景:Android 当更新来自后台线程时,如何处理进度条状态,android,Android,这是一个简单的场景: 您可以在一个单独的线程中启动一些后台操作,比如说,网络操作 将ProgressBar设置为可见 在网络操作完成之前离开你的应用程序 当你的应用程序在后台时,网络操作将完成,但你永远不会收到回调(或触发事件),因为你应该取消订阅回调/事件订阅,以防止意外的异常(你只能从主线程修改UI视图) 尽管您的后台操作已经完成,您仍可以继续应用程序并在屏幕上看到ProgressBar 我很好奇处理这种情况的最佳方法是什么。我的答案是服务或意向服务。当你的应用程序在后台时,我假设你隐藏了进
ProgressBar
设置为可见ProgressBar
我很好奇处理这种情况的最佳方法是什么。我的答案是
服务
或意向服务
。当你的应用程序在后台时,我假设你隐藏了进度条。当应用程序位于前台时,您可以绑定到服务实例,可能有一个返回当前进度的方法。如果进度大于或等于最大值,则再次显示进度,否则执行另一个操作一个可能的选项也可以使用事件总线(例如)以及在网络操作完成后举行粘性事件,并在活动的恢复中检查此事件。此类场景(还可以包括数据处理、视图更新等)的一般模式为:
这样,每次活动或片段出现在前台时,视图都会用最新的参数进行更新。ProgressBar是否在XML中?
/*
`controller` is the object with reference to the task
currently being executed.
It can be anything:
a network operation,
a file copy,
an image processing,
an asset loading, etc, etc...
*/
public void onStart() {
super.onStart();
myView.setSomeProperty(controller.getCurrentValue());
controller.subscribe(this);
}
public void onStop() {
controller.unsubscribe(this);
super.onStop();
}
@Override
public void onControllerSubscriptionUpdate(int newValue){
myView.setSomeProperty(newValue);
}