Xamarin.Androidがバックグラウンドスレッドで非同期メソッドを使用すると、画面がフラッシュします

ライアン

そのため、作成中のアプリのロード/スプラッシュ画面を作成しようとしています。基本的に、ユーザーが認証されていない場合、ユーザーはアプリの他の部分にアクセスできないはずです。さらに、メインアクティビティをロードする前に、アプリで必要なデータベースオブジェクトの同期を試みたいと思います。

問題は、Authenticate()メソッドとInitLocalStoreAsync()メソッドを呼び出すと、メソッドが実行されている間、画面が点滅することです(アクティビティのリロードのように、またはアプリが理解できないことを実行しているように)。実行中です。それが起こらないようにしたいと思います。

私はAndroidApp Devに非常に慣れておらず、Xamarinにも慣れていません。

認証などに関するAzureMobileServicesチュートリアルからの変更されたコードを使用しています。

RunOnUiThreadを使用してこれらのメソッドを実行する必要がありますか?もしそうなら、RunOnUiThreadと組み合わせてどのように待つのですか?それとも、これをまったく別の方法で行う必要がありますか?

私はとても迷っています。フォローするチュートリアルを検索して見つけようとしましたが、答えが見つからないようです。これまでのコードは次のとおりです。

protected override async void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);
        SetContentView (Resource.Layout.Activity_Splash);
        // Create your application here

        try{
            CurrentPlatform.Init ();

            // Create the Mobile Service Client instance, using the provided
            // Mobile Service URL and key
            client = new MobileServiceClient (applicationURL, applicationKey);
            statusText = FindViewById<TextView> (Resource.Id.SplashStatusText);

            ThreadPool.QueueUserWorkItem(x => Initialize());

        }catch(Java.Net.MalformedURLException){
            CreateAndShowDialog (new Exception ("There was an error creating the Mobile Service. Verify the URL"), "Error");
        }catch(Exception e) {
            CreateAndShowDialog (e, "Error");
        }
    }

    private async void Initialize()
    {
        RunOnUiThread(() => statusText.Text = "Authenticating...");
        await Authenticate();

        RunOnUiThread (() => statusText.Text = "Syncing...");
        await InitLocalStoreAsync();

        MoveToMainActivity();
    }

    private async Task Authenticate()
    {
        try
        {
            user = await client.LoginAsync(this, MobileServiceAuthenticationProvider.Google);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }

    private async Task InitLocalStoreAsync()
    {
        // new code to initialize the SQLite store
        string path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), localDbFilename);

        if (!File.Exists(path))
        {
            File.Create(path).Dispose();
        }

        var store = new MobileServiceSQLiteStore(path);
        store.DefineTable<ToDoItem>();

        // Uses the default conflict handler, which fails on conflict
        // To use a different conflict handler, pass a parameter to InitializeAsync. For more details, see http://go.microsoft.com/fwlink/?LinkId=521416
        await client.SyncContext.InitializeAsync(store);
    }

画面が点滅しないようにこれを再構築するにはどうすればよいですか?

コンダス

非同期メソッドを実行する場合は、タスクファクトリを使用する必要があります。

RunOnUiThread(() => statusText.Text = "Loading.");
Task.Run(() => AsyncWork()).ContinueWith(result => RunOnUiThread(() => statusText.Text = "Done!"));

画面が点滅します。アプリがクラッシュして最後のアクティビティを回復しようとしている、またはUIスレッドの要素を更新して処理/作業を行っているため、「途切れ」ている可能性があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Xamarinアプリケーションのバックグラウンドで非同期メソッドを呼び出す方法

分類Dev

Xamarin.Androidイベントハンドラーから非同期でWebAPIを呼び出すとデッドロックが発生します

分類Dev

Xamarin.Formsの非同期タスクはiOS / Androidバックグラウンドモードでどのように機能しますか

分類Dev

バックグラウンドコードとしてC#を使用して、Xamarinフォームのフレーム内にStackLayoutを作成します

分類Dev

Xamarinでメソッドを非同期にする(C#)

分類Dev

Xamarin FormsアプリはiOSのリリースモードでクラッシュしますが、デバッグモードでは機能します

分類Dev

Xamarin.Formsバックグラウンドスレッド

分類Dev

Xamarinをアップグレードすると、「クラスファイルのバージョン52.0が間違っています。50.0になるはずです」というエラーが発生します。

分類Dev

XamarinフォームがOnAppearingをオーバーライドすると、アプリがクラッシュします

分類Dev

カスタムレンダラーを作成すると、AndroidでXamarinがクラッシュする

分類Dev

Xamarin.AndroidアプリでWikitudeがクラッシュする仮想メソッドがありませんsetLightEstimationMode

分類Dev

Xamarinの別のクラスのメソッドを使用する

分類Dev

Xamarinを使用してバインドされたECSlidingViewControllerがクラッシュを引き起こす

分類Dev

xamarin.androidアプリケーションをデバッグしようとすると、常に「アプリケーションがブレークモードになっています」エラーが発生します

分類Dev

Xamarin C#Androidの非同期関数-アプリケーションがスレッドでスタックしている

分類Dev

Xamarinフォームのバックグラウンドタスクは、アプリがiOSで開いている場合にのみ実行されます

分類Dev

Xamarinフォームのバックグラウンドタスクは、アプリがiOSで開いている場合にのみ実行されます

分類Dev

Xamarin.Formsでバックグラウンドサービスを一時停止します

分類Dev

AzureモバイルアプリとXamarinフォーム:バックグラウンドでFacebookを使用して認証する

分類Dev

Xamarin Live Playerはビットマップをロードするとクラッシュしますが、USB接続を介して正常に動作します

分類Dev

Xamarin.Forms iOS-アプリが現在アクティブでない場合やバックグラウンドにある場合でも、デバイスがインターネットに接続するとデータのアップロードを開始します

分類Dev

Xamarin RestSharpPOSTメソッドがリクエストタイムアウトエラーと名前解決エラーをスローします

分類Dev

Xamarin iOSFirebaseクラウドメッセージング-プッシュ通知-デバイストークンを使用してテストメッセージを送信できません

分類Dev

バックグラウンドスレッドで使用すると、非同期キューがハングする

分類Dev

async / awaitメソッドはAndroidでWebサービスの応答をクラッシュさせますが、同じコードがxamarinネイティブアプリケーションのWindowPhoneおよびiOSアプリで正常に機能します

分類Dev

xamarin.iosdatetimeがデバイスでクラッシュする

分類Dev

Xamarin / C#戻り値の型が異なるバックグラウンドスレッド(UI以外)で2つのタスクを並行して実行する

分類Dev

Xamarin.FormsがEditTextメソッドをオーバーライドすると、無限ループが発生します

分類Dev

Xamarin Formsで、MainActivityのメソッドを呼び出す方法、または別のクラスからMainActivityの「ウィンドウ」を取得する方法は?

Related 関連記事

  1. 1

    Xamarinアプリケーションのバックグラウンドで非同期メソッドを呼び出す方法

  2. 2

    Xamarin.Androidイベントハンドラーから非同期でWebAPIを呼び出すとデッドロックが発生します

  3. 3

    Xamarin.Formsの非同期タスクはiOS / Androidバックグラウンドモードでどのように機能しますか

  4. 4

    バックグラウンドコードとしてC#を使用して、Xamarinフォームのフレーム内にStackLayoutを作成します

  5. 5

    Xamarinでメソッドを非同期にする(C#)

  6. 6

    Xamarin FormsアプリはiOSのリリースモードでクラッシュしますが、デバッグモードでは機能します

  7. 7

    Xamarin.Formsバックグラウンドスレッド

  8. 8

    Xamarinをアップグレードすると、「クラスファイルのバージョン52.0が間違っています。50.0になるはずです」というエラーが発生します。

  9. 9

    XamarinフォームがOnAppearingをオーバーライドすると、アプリがクラッシュします

  10. 10

    カスタムレンダラーを作成すると、AndroidでXamarinがクラッシュする

  11. 11

    Xamarin.AndroidアプリでWikitudeがクラッシュする仮想メソッドがありませんsetLightEstimationMode

  12. 12

    Xamarinの別のクラスのメソッドを使用する

  13. 13

    Xamarinを使用してバインドされたECSlidingViewControllerがクラッシュを引き起こす

  14. 14

    xamarin.androidアプリケーションをデバッグしようとすると、常に「アプリケーションがブレークモードになっています」エラーが発生します

  15. 15

    Xamarin C#Androidの非同期関数-アプリケーションがスレッドでスタックしている

  16. 16

    Xamarinフォームのバックグラウンドタスクは、アプリがiOSで開いている場合にのみ実行されます

  17. 17

    Xamarinフォームのバックグラウンドタスクは、アプリがiOSで開いている場合にのみ実行されます

  18. 18

    Xamarin.Formsでバックグラウンドサービスを一時停止します

  19. 19

    AzureモバイルアプリとXamarinフォーム:バックグラウンドでFacebookを使用して認証する

  20. 20

    Xamarin Live Playerはビットマップをロードするとクラッシュしますが、USB接続を介して正常に動作します

  21. 21

    Xamarin.Forms iOS-アプリが現在アクティブでない場合やバックグラウンドにある場合でも、デバイスがインターネットに接続するとデータのアップロードを開始します

  22. 22

    Xamarin RestSharpPOSTメソッドがリクエストタイムアウトエラーと名前解決エラーをスローします

  23. 23

    Xamarin iOSFirebaseクラウドメッセージング-プッシュ通知-デバイストークンを使用してテストメッセージを送信できません

  24. 24

    バックグラウンドスレッドで使用すると、非同期キューがハングする

  25. 25

    async / awaitメソッドはAndroidでWebサービスの応答をクラッシュさせますが、同じコードがxamarinネイティブアプリケーションのWindowPhoneおよびiOSアプリで正常に機能します

  26. 26

    xamarin.iosdatetimeがデバイスでクラッシュする

  27. 27

    Xamarin / C#戻り値の型が異なるバックグラウンドスレッド(UI以外)で2つのタスクを並行して実行する

  28. 28

    Xamarin.FormsがEditTextメソッドをオーバーライドすると、無限ループが発生します

  29. 29

    Xamarin Formsで、MainActivityのメソッドを呼び出す方法、または別のクラスからMainActivityの「ウィンドウ」を取得する方法は?

ホットタグ

アーカイブ