0

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、常に表示されるようにしましたが、アプリがバックプロセスを実行するたびにアニメーションが停止します。

編集:ビューモデルで試したコードは次のようなものです:

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それらはすべてasyncawaited

ご清聴ありがとうございました。

4

1 に答える 1

0

問題はUI自体ではありませんが、あなたが言うように、実行している同期コードでUIスレッドをブロックしています。

UI スレッドの時間を浪費するのではなく、ThreadPool または Task を使用してこれらの処理をカプセル化し、バックグラウンドで実行する必要があります。

特定の実装は、最初の投稿で提供していないコードによって異なります。

于 2016-07-08T12:44:18.007 に答える