我正在使用MVVMCross开发Android应用程序。我在AXML上使用进度条标记,并且只要应用程序具有后台活动,它就会停止动画。我猜它是因为我以错误的方式使用同步任务,但我找不到解决它的方法。
我正在使用的ProgressBar标记是:
<LinearLayout
android:orientation="vertical"
android:background="#88000000"
android:layout_alignParentTop="true"
local:MvxBind="Visibility Visibility(IsLoading)"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical|center_horizontal">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/progressBar1"
android:layout_marginTop="@dimen/element_margin_large"
android:layout_marginBottom="@dimen/element_margin_large" />
</LinearLayout>
我尝试将IsLoading
更改为true
,以使其始终可见,并且每当应用执行任何后退过程时动画都会停止。
编辑:我在viewmodel上尝试的代码是这样的:
private MvxCommand _xxxCommand;
public ICommand XxxCommand
{
get
{
_xxxCommand = _xxxCommand ?? new MvxCommand(XxxCmd);
return _xxxCommand;
}
}
public async void XxxCmd()
{
IsLoading = true;
await Task.Run(() =>
{
ShowViewModel<XxxViewModel>();
});
IsLoading = false;
}
但是ShowViewModel
执行时它会一直冻结。在下一个视图中,我有一些绑定并调用外部API
,但所有绑定都是async
和awaited
感谢您的关注。
答案 0 :(得分:0)
问题不在于UI本身,但正如您自己所说,您正在使用正在执行的同步代码阻止UI线程。
您需要使用ThreadPool或Task来封装您所做的事情并在后台运行它们,而不是占用UI线程的时间。
具体实施将取决于您在开场白中未提供的代码。