2017-05-26 5 views
0

私はXamarin.iOSアプリをやっています。私の呼び出しが完了するまでUIスレッドをブロックしてから再開

アプリが使用されているときに呼び出すのではなく、アプリが読み込まれる前にAPIから顧客/ショッピングデータを取得したい(データをプリロードする)。私はAppDelegateに物事を掛ける必要があると思ったので、私のAPIコールが完了するまでスプラッシュスクリーンに詰めておくことができます。アプリケーションの起動時にユーザーがログインしているとします。

public async Task<CustomerShoppingSummary> GetCustomerShoppingSummary() 

しかし、それは私がのviewDidLoad中または他の分野でそれを呼び出していた:私は、アプリの他の部分から非同期呼び出した

私の非同期メソッドがあります。私は今、アプリが始まる前にすべての情報を得たいと思っています。だから間違いなく、アプリケーション全体を永久に停止するか(.resultを使って、終了時に停止させる方法を見つけ出していない)、または非同期に実行させることができました。論理が完了する。

私はこれをAppDelegateで/どのような方法でお勧めしますか?

たぶん

public override void OnActivated(UIApplication application) 

同期これを実行し、完了するまでUIスレッドをブロックするために、任意の勧告?

ありがとうございます!

+0

あなたのUIスレッドをブロックしないでください。それはプログラミングではしばしば「それは決して良いアイデアだ」と言うことはできませんが、決して決して言うことはありません。 –

+0

アプリが起動する前にデータを読み込みたい - そうでない場合は画面に表示され、そのデータは表示されません。 – NullHypothesis

+2

まだデータがない場合でも、反応しやすいライブUIが表示されます。起動時にアプリがハングアップすると、それはスピナーで空になるよりはるかに悪いユーザーエクスペリエンスです。どちらかといえば長い間待っていますが、あなたの考えでは、もっと迷惑です。ユーザーはハングするアプリケーションを嫌う。 –

答えて

1

私は結局のところより良く見えたので、ホームページでスピナーを使用しました。

ありがとうございます。

+0

ちょうどあなたが知っている。何かは通常、スプラッシュ画面とまったく同じに見えるUIViewControllerである拡張スプラッシュ画面を作成することです。ここでは、すべてのサービスとデータの初期化を実行してから、ホーム画面に移動したら完了します。これは、すべてが準備ができていることを確認できるため、そこから何か起きた場合はエラーページに移動することができます。 長いコメントを残して申し訳ありません。 – apineda

関連する問題