2016-05-24 9 views
0

現在のAppプロジェクトにXamarin.Android/Xamarin.iOSとMvvmCrossを使用しています。アプリがバックグラウンドから復帰したときのMvvmCross ViewModel例外

私のアンドロイドアプリがバックグラウンドに移動すると、アプリが前面に戻ったときに「ロケータMvxDefaultViewModelLocatorからタイプ...のViewModelを構築および初期化できませんでした」という例外が発生します(添付スクリーンショット)。しかし、これは毎回ではありません。これは、アプリケーションがバックグラウンドモードに長時間入っていて、他の多くのアプリケーションがデバイスで開かれている場合にのみエラーが発生したようです。これはAndroidのメモリ管理と関係がありますか? Exception

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

編集: ありがとうございました。ここでは、内部例外は次のとおりです。

MvvmCross.Plattform.Exceptions.MvxException:タイプQuestionListViewModelの 問題実行しているのViewModelライフサイクル - > System.Reflection.TargetInvocationException:例外は、呼び出し のターゲットによって を投げてきました - > MvvmCross.Platfrom.Exceptions.MvxException:欠落しているテキスト・プロバイダー - ) MvvmCross.Localization.MvxLanguageBinder.get_TextProivder(に適しIMvxTextProviderでIOCを初期化してください...

だから私はuのよMvvmCross JsonLocalizationプラグインを歌います。

TextProviderBuilder builder = new TextProviderBuilder(fileService.LocalizationDirectoryPath); 
this.builder.LoadResources(cultureKey.Trim()); 
Mvx.RegisterSingleton<IMvxTextProvider(builder.TextProvider); 
Mvx.RegisterSingleton<IMvxTextProviderBuilder>(builder); 

と私のViewModelクラスでこのようにそれを消費:起動時に、私はこのように私のtextproviderを登録

public string GetText(string key) 
{ 
    string text = new MvxLanguageBinder(Constants.GeneralNamespace, "shared").GetText(key); 

    return text; 
} 

Androidのメモリマネージャがtextproviderシングルトンインスタンスを殺すようなので、それはそうですか?

+0

InnerExceptionの内容を確認し、ここに投稿する必要があります。 –

+0

IoCコンテナをどこで設定しますか?これはあなたのInitialize() - Core-ProjectのあなたのMvxApplication-Classのメソッドで起こっていますか?私は、IMvxTextProviderBuilderビルダーのインスタンスがConstructor Injectionを介して提供されることを期待しています。 –

答えて

1

これは、アンドロイドのメモリ管理で何かする必要があります。 多くのアプリが開かれていて、アプリケーションが一度も使用されなかった場合、アンドロイドは一時的に保留にして割り当てられたメモリを解放することを決定します。

内部例外をチェックしましたか?おそらく、あなたのViewModelで何かが再初期化され、いくつかの前提条件が満たされていないために、それを行うことはできません。基本的には、すべてのビュー/ビューモデルが他のビュー/ビューモデルとはまったく独立していることを確認する必要があります。

例として: あなたは以前のビューモデルで何かを解析し、次のビューモデルでそれを使用します。あなたは何とかそれを渡すので、あなたはあなたの2番目のビューモデルでそれを持っています。しかし、メモリ管理者があなたのアプリのメモリを解放できると判断した場合は、再度開いたときに失われます。 したがって、あなたのビューモデルが逆戻りするかどうかを確認する必要があります。

通常、MVVMCrossはそのほとんどを処理しますが、ビューモデルのコードはありません。問題に指をかける。