MSAL - Recurring ANR - Input dispatching timed out

60 Views Asked by At

I currently have an app in the Play Store which integrates with the Microsoft Identity Platform to accept education account logins. It should be noted that, to implement authentication, the application uses the Microsoft Authentication Library for Android (MSAL).

Taking into account the above, the application works correctly on most Android devices, however, within the Google Play Console, in the ANR Bugs and Errors section, there is an ANR error that is repeated very frequently and is detailed next:

ANR details:

com.microsoft.identity.common.java.net.UrlConnectionHttpClient.executeHttpSend

Input dispatching timed out

Provided by:

Android vitals

Problem:

The main thread was blocked while trying to acquire a lock that was held by another thread

Recommendation:

Try to minimize the use of locks on the main thread and make sure that whatever holds these locks does not hold them for too long. Avoid costly and unpredictable operations, such as I/O or Binder calls, while retaining a lock.

Stack trace:

"main" tid=1 Blocked
  at com.microsoft.identity.common.java.providers.microsoft.azureactivedirectory.AzureActiveDirectory.setEnvironment (AzureActiveDirectory.java)
  at com.microsoft.identity.client.PublicClientApplication.initializeApplication (PublicClientApplication.java:1071)
  at com.microsoft.identity.client.PublicClientApplication.<init> (PublicClientApplication.java:1062)
  at com.microsoft.identity.client.SingleAccountPublicClientApplication.<init> (SingleAccountPublicClientApplication.java:104)
  at com.microsoft.identity.client.PublicClientApplication$9.onTaskCompleted (PublicClientApplication.java:942)
  at com.microsoft.identity.client.PublicClientApplication$9.onTaskCompleted (PublicClientApplication.java:930)
  at com.microsoft.identity.common.java.controllers.CommandDispatcher.commandCallbackOnTaskCompleted (CommandDispatcher.java:649)
  at com.microsoft.identity.common.java.controllers.CommandDispatcher.access$1000 (CommandDispatcher.java:99)
  at com.microsoft.identity.common.java.controllers.CommandDispatcher$4.run (CommandDispatcher.java:625)
  at android.os.Handler.handleCallback (Handler.java:938)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loop (Looper.java:237)
  at android.app.ActivityThread.main (ActivityThread.java:8163)
  at java.lang.reflect.Method.invoke (Native method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:656)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:972)
"pool-9-thread-1" tid=6 Native
  #00  pc 0x00000000000d7b58  /apex/com.android.runtime/lib64/bionic/libc.so (__ppoll+8)
  #01  pc 0x0000000000095b64  /apex/com.android.runtime/lib64/bionic/libc.so (poll+92)
  #02  pc 0x0000000000029e6c  /apex/com.android.art/lib64/libjavacore.so (Linux_poll(_JNIEnv*, _jobject*, _jobjectArray*, int)+552)
  at libcore.io.Linux.poll (Native method)
  at libcore.io.ForwardingOs.poll (ForwardingOs.java:168)
  at libcore.io.BlockGuardOs.poll (BlockGuardOs.java:263)
  at libcore.io.ForwardingOs.poll (ForwardingOs.java:168)
  at libcore.io.IoBridge.isConnected (IoBridge.java:266)
  at libcore.io.IoBridge.connectErrno (IoBridge.java:192)
  at libcore.io.IoBridge.connect (IoBridge.java:134)
  at java.net.PlainSocketImpl.socketConnect (PlainSocketImpl.java:142)
  at java.net.AbstractPlainSocketImpl.doConnect (AbstractPlainSocketImpl.java:390)
  at java.net.AbstractPlainSocketImpl.connectToAddress (AbstractPlainSocketImpl.java:230)
  at java.net.AbstractPlainSocketImpl.connect (AbstractPlainSocketImpl.java:212)
  at java.net.SocksSocketImpl.connect (SocksSocketImpl.java:436)
  at java.net.Socket.connect (Socket.java:621)
  at com.android.okhttp.internal.Platform.connectSocket (Platform.java:182)
  at com.android.okhttp.internal.io.RealConnection.connectSocket (RealConnection.java:145)
  at com.android.okhttp.internal.io.RealConnection.connect (RealConnection.java:116)
  at com.android.okhttp.internal.http.StreamAllocation.findConnection (StreamAllocation.java:186)
  at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection (StreamAllocation.java:128)
  at com.android.okhttp.internal.http.StreamAllocation.newStream (StreamAllocation.java:97)
  at com.android.okhttp.internal.http.HttpEngine.connect (HttpEngine.java:289)
  at com.android.okhttp.internal.http.HttpEngine.sendRequest (HttpEngine.java:232)
  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute (HttpURLConnectionImpl.java:465)
  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse (HttpURLConnectionImpl.java:411)
  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream (HttpURLConnectionImpl.java:248)
  at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream (DelegatingHttpsURLConnection.java:211)
  at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream (HttpsURLConnectionImpl.java:30)
  at com.microsoft.identity.common.java.net.UrlConnectionHttpClient.executeHttpSend (UrlConnectionHttpClient.java:342)
  at com.microsoft.identity.common.java.net.UrlConnectionHttpClient.access$100 (UrlConnectionHttpClient.java:84)
  at com.microsoft.identity.common.java.net.UrlConnectionHttpClient$4.call (UrlConnectionHttpClient.java:254)
  at com.microsoft.identity.common.java.net.UrlConnectionHttpClient$4.call (UrlConnectionHttpClient.java:252)
  at com.microsoft.identity.common.java.net.StatusCodeAndExceptionRetry.attempt (StatusCodeAndExceptionRetry.java:80)
  at com.microsoft.identity.common.java.net.StatusCodeAndExceptionRetry.attempt (StatusCodeAndExceptionRetry.java:41)
  at com.microsoft.identity.common.java.net.UrlConnectionHttpClient.method (UrlConnectionHttpClient.java:252)
  at com.microsoft.identity.common.java.net.AbstractHttpClient.get (AbstractHttpClient.java:91)
  at com.microsoft.identity.common.java.providers.microsoft.azureactivedirectory.AzureActiveDirectory.performCloudDiscovery (AzureActiveDirectory.java:193)
  at com.microsoft.identity.common.internal.migration.AdalMigrationAdapter.loadCloudDiscoveryMetadata (AdalMigrationAdapter.java:241)
  at com.microsoft.identity.common.internal.migration.AdalMigrationAdapter.adapt (AdalMigrationAdapter.java:120)
  at com.microsoft.identity.common.internal.migration.TokenMigrationUtility$1.run (TokenMigrationUtility.java:66)
  at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
  at java.lang.Thread.run (Thread.java:923)

1.- I have carefully reviewed my source code and I use threads when logging in users, to prevent the main Android thread from having a lot of work.

2.- I am using the latest version of the Microsoft Authentication Library for Android.

Which is the following:

'com.microsoft.identity.client:msal:4.9.0'

As an extra piece of information, I have noticed that the ANR error occurs more frequently in Android 13, as shown in the following image:

ANDROID VERSIONS

I haven't been able to resolve this ANR error for quite some time now, so any advice or suggestions would be greatly appreciated.

Thank you so much.

0

There are 0 best solutions below