ObjC: Always dispatch async in UIApplication status observer.

Fixes a possible deadlock.

BUG=webrtc:8130

Review-Url: https://codereview.webrtc.org/3003633002
Cr-Original-Commit-Position: refs/heads/master@{#19464}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: cca0006e33c106a7f62df1a1b50f84676cc5ed1e
diff --git a/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.m b/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.m
index 718aeca..c598a0e 100644
--- a/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.m
+++ b/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.m
@@ -14,7 +14,11 @@
 
 #import <UIKit/UIKit.h>
 
+#include "webrtc/rtc_base/checks.h"
+
 @implementation RTCUIApplicationStatusObserver {
+  BOOL _initialized;
+  dispatch_block_t _initializeBlock;
   UIApplicationState _state;
 }
 
@@ -45,21 +49,24 @@
                       _state = [UIApplication sharedApplication].applicationState;
                     }];
 
-    dispatch_block_t initializeBlock = ^{
+    _initialized = NO;
+    _initializeBlock = dispatch_block_create(DISPATCH_BLOCK_INHERIT_QOS_CLASS, ^{
       _state = [UIApplication sharedApplication].applicationState;
-    };
+      _initialized = YES;
+    });
 
-    if ([NSThread isMainThread]) {
-      initializeBlock();
-    } else {
-      dispatch_sync(dispatch_get_main_queue(), initializeBlock);
-    }
+    dispatch_async(dispatch_get_main_queue(), _initializeBlock);
   }
 
   return self;
 }
 
 - (BOOL)isApplicationActive {
+  if (!_initialized) {
+    long ret =
+        dispatch_block_wait(_initializeBlock, dispatch_time(DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC));
+    RTC_CHECK_EQ(ret, 0);
+  }
   return _state == UIApplicationStateActive;
 }