2016-07-08 36 views
0

我正在開發使用MVVMCross的Android應用程序。我在AXML上使用progressbar標記,並在應用程序具有後臺活動時停止動畫。我猜是因爲我用錯誤的方式使用同步任務,但我沒有找到解決方法。Android應用程序使用mvvmcross的活動指示器

,我使用的進度標籤:

<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> 

我試圖改變IsLoadingtrue,以保持它可見的所有時間,和動畫停止每次應用程序做任何返回處理。

編輯:我試過視圖模型的代碼是這樣的:

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

謝謝您的關注。

回答

0

問題不在於UI本身,而是正如你自己所說的那樣,你正在用正在執行的同步代碼阻塞UI線程。

您需要使用ThreadPool或Task來封裝您所做的事情並在後臺運行它們,而不是耗盡UI線程的時間。

具體的實現將取決於你的代碼,你沒有在你的開篇文章中提供。

+0

Debbuging the app我發現我當程序執行'ShowViewModel <...>();'當動畫停止時。我嘗試用'等待Task.Run(()=> {(...)};''封裝它''但仍然凍結 – JCQuiroga

+0

在Init或Start或構造函數中,你在顯示的ViewModel中做什麼? – Cheesebaron

+0

在構造函數,我初始化了兩個服務的兩個接口,我調用了兩個異步方法 – JCQuiroga

相關問題