From 7d66ed0aada19c7d320186a1a34907d77d38ab0d Mon Sep 17 00:00:00 2001 From: Atsushi Eno Date: Sat, 17 Sep 2016 06:05:29 +0900 Subject: Android BeginInvokeOnMainThread() should not possibly block. (#343) Android.App.Activity.RunOnUiThread() does not always run the argument Runnable asynchronously; actually it is run synchronously if current thread is the UI thread [*1][*2] Use Handler.Post() instead. (It is also used in Android.App.SyncContext[*3]) [*1] https://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable) [*2] http://stackoverflow.com/questions/33039600/android-runonuithread-not-async [*3] https://github.com/xamarin/xamarin-android/blob/5777337/src/Mono.Android/Android.App/SyncContext.cs#L15 --- Xamarin.Forms.Platform.Android/Forms.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Xamarin.Forms.Platform.Android/Forms.cs b/Xamarin.Forms.Platform.Android/Forms.cs index a2a063c9..c2dc770b 100644 --- a/Xamarin.Forms.Platform.Android/Forms.cs +++ b/Xamarin.Forms.Platform.Android/Forms.cs @@ -264,9 +264,7 @@ namespace Xamarin.Forms public void BeginInvokeOnMainThread(Action action) { - var activity = Context as Activity; - if (activity != null) - activity.RunOnUiThread(action); + new Handler(Looper.MainLooper).Post(action); } public Ticker CreateTicker() -- cgit v1.2.3