cordova-plugin-inappbrowser
cordova-plugin-inappbrowser copied to clipboard
[InAppBrowser]Fatal Exception occured due to "not attached to window" on AndroidP
trafficstars
Steps to reproduce:
- Open InAppBrowser on cordova app.
- Move to Settings.
- Setting > Display > Display size. Then change display size.
- Resume cordova app. Then, App is crashed by fatal exception.
Process: com.myapp, PID: 18768
java.lang.IllegalArgumentException: View=DecorView@fb121f3[MainActivity] not attached to window manager
at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:497)
at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:406)
at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:138)
at android.app.Dialog.dismissDialog(Dialog.java:375)
at android.app.Dialog.dismiss(Dialog.java:358)
at org.apache.cordova.inappbrowser.InAppBrowser$5$1.onPageFinished(Unknown Source:18)
at xf.c(SourceFile:251)
at afs.handleMessage(SourceFile:72)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6813)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:522)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:889)
I think MainActivity have been destroyed and dialog is detacched when Display size is changed. But InAppBrowser still have old dialog and try to dismiss() when app is resumed. my-app\plugins\cordova-plugin-inappbrowser\src\android\InAppBrowser.java
public void closeDialog() {
this.cordova.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
final WebView childView = inAppWebView;
// The JS protects against multiple calls, so this should happen only when
// closeDialog() is called by other native code.
if (childView == null) {
return;
}
childView.setWebViewClient(new WebViewClient() {
// NB: wait for about:blank before dismissing
public void onPageFinished(WebView view, String url) {
if (dialog != null) {
dialog.dismiss(); //!!!dialog is not attached to window
dialog = null;
}
}
});
This issue is not reproduced on Android O. (onPageFinished is not called on Android O, So dialog.dismiss() is not called.)
In a cordova app that we have, we reproduce the same issue of @hhhhub000 . We saw the following stack from crashlytics:
Fatal Exception: java.lang.IllegalArgumentException: View=DecorView@e2994a2[MainActivity] not attached to window manager
at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:485)
at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:394)
at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:124)
at android.app.Dialog.dismissDialog(Dialog.java:375)
at android.app.Dialog.dismiss(Dialog.java:358)
at org.apache.cordova.inappbrowser.InAppBrowser$5$1.onPageFinished(InAppBrowser.java:462)
at vl.d(PG:307)
at aHZ.handleMessage(PG:72)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6923)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:870)
Thank you!
Same issue:
12-30 09:32:47.487: E/AndroidRuntime(15993): java.lang.IllegalArgumentException: View=DecorView@4937e39[MainActivity] not attached to window manager
12-30 09:32:47.487: E/AndroidRuntime(15993): at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:485)
12-30 09:32:47.487: E/AndroidRuntime(15993): at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:394)
12-30 09:32:47.487: E/AndroidRuntime(15993): at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:124)
12-30 09:32:47.487: E/AndroidRuntime(15993): at android.app.Dialog.dismissDialog(Dialog.java:375)
12-30 09:32:47.487: E/AndroidRuntime(15993): at android.app.Dialog.dismiss(Dialog.java:358)
12-30 09:32:47.487: E/AndroidRuntime(15993): at org.apache.cordova.inappbrowser.InAppBrowser$5$1.onPageFinished(InAppBrowser.java:434)
12-30 09:32:47.487: E/AndroidRuntime(15993): at sV.d(PG:311)
12-30 09:32:47.487: E/AndroidRuntime(15993): at aHF.handleMessage(PG:73)
12-30 09:32:47.487: E/AndroidRuntime(15993): at android.os.Handler.dispatchMessage(Handler.java:106)
12-30 09:32:47.487: E/AndroidRuntime(15993): at android.os.Looper.loop(Looper.java:193)
12-30 09:32:47.487: E/AndroidRuntime(15993): at android.app.ActivityThread.main(ActivityThread.java:6718)
12-30 09:32:47.487: E/AndroidRuntime(15993): at java.lang.reflect.Method.invoke(Native Method)
12-30 09:32:47.487: E/AndroidRuntime(15993): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
12-30 09:32:47.487: E/AndroidRuntime(15993): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
12-30 09:32:47.487: E/AndroidJUnitRunner(15993): An unhandled exception was thrown by the app.
12-30 09:32:47.488: I/AndroidJUnitRunner(15993): Bringing down the entire Instrumentation process.
12-30 09:32:47.488: E/MonitoringInstr(15993): Exception encountered by: Thread[main,5,main]. Dumping thread state to outputs and pining for the fjords.
12-30 09:32:47.488: E/MonitoringInstr(15993): java.lang.IllegalArgumentException: View=DecorView@4937e39[MainActivity] not attached to window manager
12-30 09:32:47.488: E/MonitoringInstr(15993): at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:485)
12-30 09:32:47.488: E/MonitoringInstr(15993): at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:394)
12-30 09:32:47.488: E/MonitoringInstr(15993): at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:124)
12-30 09:32:47.488: E/MonitoringInstr(15993): at android.app.Dialog.dismissDialog(Dialog.java:375)
12-30 09:32:47.488: E/MonitoringInstr(15993): at android.app.Dialog.dismiss(Dialog.java:358)
12-30 09:32:47.488: E/MonitoringInstr(15993): at org.apache.cordova.inappbrowser.InAppBrowser$5$1.onPageFinished(InAppBrowser.java:434)
12-30 09:32:47.488: E/MonitoringInstr(15993): at sV.d(PG:311)
12-30 09:32:47.488: E/MonitoringInstr(15993): at aHF.handleMessage(PG:73)
12-30 09:32:47.488: E/MonitoringInstr(15993): at android.os.Handler.dispatchMessage(Handler.java:106)
12-30 09:32:47.488: E/MonitoringInstr(15993): at android.os.Looper.loop(Looper.java:193)
12-30 09:32:47.488: E/MonitoringInstr(15993): at android.app.ActivityThread.main(ActivityThread.java:6718)
12-30 09:32:47.488: E/MonitoringInstr(15993): at java.lang.reflect.Method.invoke(Native Method)
12-30 09:32:47.488: E/MonitoringInstr(15993): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
12-30 09:32:47.488: E/MonitoringInstr(15993): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
12-30 09:32:47.491: E/libc(646): Access denied finding property "vendor.debug.egl.swapinterval"
12-30 09:32:47.492: E/libc(646): Access denied finding property "vendor.debug.egl.swapinterval"
12-30 09:32:47.493: E/THREAD_STATE(15993): Thread[Espresso Key Event #0,5,main]
12-30 09:32:47.493: E/THREAD_STATE(15993): java.lang.Object.wait(Native Method)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.lang.Thread.parkFor$(Thread.java:2137)
12-30 09:32:47.493: E/THREAD_STATE(15993): sun.misc.Unsafe.park(Unsafe.java:358)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2059)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.lang.Thread.run(Thread.java:764)
12-30 09:32:47.493: E/THREAD_STATE(15993): Thread[HeapTaskDaemon,5,system]
12-30 09:32:47.493: E/THREAD_STATE(15993): Thread[Binder:15993_3,5,main]
12-30 09:32:47.493: E/THREAD_STATE(15993): Thread[JavaBridge,7,main]
12-30 09:32:47.493: E/THREAD_STATE(15993): android.os.MessageQueue.nativePollOnce(Native Method)
12-30 09:32:47.493: E/THREAD_STATE(15993): android.os.MessageQueue.next(MessageQueue.java:326)
12-30 09:32:47.493: E/THREAD_STATE(15993): android.os.Looper.loop(Looper.java:160)
12-30 09:32:47.493: E/THREAD_STATE(15993): android.os.HandlerThread.run(HandlerThread.java:65)
12-30 09:32:47.493: E/THREAD_STATE(15993): Thread[UiAutomation,5,main]
12-30 09:32:47.493: E/THREAD_STATE(15993): android.os.MessageQueue.nativePollOnce(Native Method)
12-30 09:32:47.493: E/THREAD_STATE(15993): android.os.MessageQueue.next(MessageQueue.java:326)
12-30 09:32:47.493: E/THREAD_STATE(15993): android.os.Looper.loop(Looper.java:160)
12-30 09:32:47.493: E/THREAD_STATE(15993): android.os.HandlerThread.run(HandlerThread.java:65)
12-30 09:32:47.493: E/THREAD_STATE(15993): Thread[ThreadPoolForeg,5,main]
12-30 09:32:47.493: E/THREAD_STATE(15993): Thread[queued-work-looper,5,main]
12-30 09:32:47.493: E/THREAD_STATE(15993): android.os.MessageQueue.nativePollOnce(Native Method)
12-30 09:32:47.493: E/THREAD_STATE(15993): android.os.MessageQueue.next(MessageQueue.java:326)
12-30 09:32:47.493: E/THREAD_STATE(15993): android.os.Looper.loop(Looper.java:160)
12-30 09:32:47.493: E/THREAD_STATE(15993): android.os.HandlerThread.run(HandlerThread.java:65)
12-30 09:32:47.493: E/THREAD_STATE(15993): Thread[Binder:15993_1,5,main]
12-30 09:32:47.493: E/THREAD_STATE(15993): Thread[AudioThread,5,main]
12-30 09:32:47.493: E/THREAD_STATE(15993): Thread[CrAsyncTask apache/cordova-android#1,5,main]
12-30 09:32:47.493: E/THREAD_STATE(15993): java.lang.Object.wait(Native Method)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.lang.Thread.parkFor$(Thread.java:2137)
12-30 09:32:47.493: E/THREAD_STATE(15993): sun.misc.Unsafe.park(Unsafe.java:358)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2101)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.ArrayBlockingQueue.poll(ArrayBlockingQueue.java:402)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1091)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
12-30 09:32:47.493: E/THREAD_STATE(15993): aNc.run(Unknown Source:3)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.lang.Thread.run(Thread.java:764)
12-30 09:32:47.493: E/THREAD_STATE(15993): Thread[GoogleApiHandler,5,main]
12-30 09:32:47.493: E/THREAD_STATE(15993): android.os.MessageQueue.nativePollOnce(Native Method)
12-30 09:32:47.493: E/THREAD_STATE(15993): android.os.MessageQueue.next(MessageQueue.java:326)
12-30 09:32:47.493: E/THREAD_STATE(15993): android.os.Looper.loop(Looper.java:160)
12-30 09:32:47.493: E/THREAD_STATE(15993): android.os.HandlerThread.run(HandlerThread.java:65)
12-30 09:32:47.493: E/THREAD_STATE(15993): Thread[pool-2-thread-2,5,main]
12-30 09:32:47.493: E/THREAD_STATE(15993): java.lang.Object.wait(Native Method)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.lang.Thread.parkFor$(Thread.java:2137)
12-30 09:32:47.493: E/THREAD_STATE(15993): sun.misc.Unsafe.park(Unsafe.java:358)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:461)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:937)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1091)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.lang.Thread.run(Thread.java:764)
12-30 09:32:47.493: E/THREAD_STATE(15993): Thread[Profile Saver,5,system]
12-30 09:32:47.493: E/THREAD_STATE(15993): Thread[Espresso Remote #0,5,main]
12-30 09:32:47.493: E/THREAD_STATE(15993): java.lang.Object.wait(Native Method)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.lang.Thread.parkFor$(Thread.java:2137)
12-30 09:32:47.493: E/THREAD_STATE(15993): sun.misc.Unsafe.park(Unsafe.java:358)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2101)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1091)
12-30 09:32:47.493: E/THREAD_STATE(15993): java.util.concurrent.ThreadPoolExecutor.runWorke