【发布时间】:2016-04-24 06:32:55
【问题描述】:
该应用程序正在与 Marshmallow 一起运行。打开应用程序后,我切换到“Setting>Apps>MyApp>Permissions”来切换权限,当切换回应用程序时,它崩溃了。从 logcat 中,我发现了以下几行:
01-18 14:45:35.456 799-1158/? I/ActivityManager? Killing 23531:ca.bluecross.ab.sys1/u0a103 (adj 9): permissions revoked
01-18 14:45:35.476 799-1632/? I/WindowState? **WIN DEATH:** Window{20182a4 u0 ca.bluecross.ab.sys1/myexample.com.view.activities.eclaims.AuditActivity}
01-18 14:45:35.476 799-1600/? D/GraphicsStats? Buffer count: 6
01-18 14:45:35.477 799-894/? W/InputDispatcher? channel 'd9c6d5e myexample.com.sys1/myexample.com.view.activities.MainActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
01-18 14:45:35.477 799-894/? E/InputDispatcher? channel 'd9c6d5e myexample.com.sys1/myexample.com.view.activities.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
01-18 14:45:35.478 799-1160/? I/WindowState? **WIN DEATH:** Window{d9c6d5e u0 myexample.com.sys1/myexample.com.view.activities.MainActivity}
01-18 14:45:35.478 799-1160/? W/InputDispatcher? Attempted to unregister already unregistered input channel 'd9c6d5e myexample.com.sys1/myexample.com.view.activities.MainActivity (server)'
01-18 14:45:35.484 799-1600/? W/ActivityManager? Spurious death for ProcessRecord{5c56227 0:myexample.com.sys1/u0a103}, curProc for 23531: null
logcat 中的那些WIN DEATH是什么意思? Android 操作系统会扼杀我的应用吗?
【问题讨论】:
-
撤销权限时,您的进程会被 Android 终止。这就是新权限模型的工作原理。我不清楚您的问题是您是否在 UI 级别遇到某种崩溃,或者您是否只是看到该应用在 logcat 中被杀死,但在您可以正常重新打开它之后。
-
崩溃发生在 UI 级别,然后,单击对话框的“确定”按钮后,应用程序再次启动。
-
@thetonrifles,在logcat中进一步往下看,它显示在“设置”中撤销权限后切换回应用程序时,它会尝试重新启动活动/片段。但我对 Marshmallow 的理解是操作系统正在杀死应用程序或重新启动应用程序,对吗?因为它尝试重新启动 Activity/Fragment,其中包含来自先前屏幕的一些参数,所以应用程序在 UI 中崩溃。
-
@thetonrifles,这就是让我感到困惑的地方:在终止您的应用程序后,Android 会尝试重新创建活动并恢复其状态(包括片段)。当 android 尝试终止应用程序时,为什么要尝试重新创建当前的活动/片段。它不应该只是再次启动应用程序吗? (当前活动/片段是指当我切换到“设置”中撤销权限时的屏幕)在我的情况下,一些参数来自前一个片段,并且在重新创建当前片段时变为空,因此应用程序崩溃。
-
@thetonrifles 与旋转设备不同。如果您在 Application 类中有类成员,当您更改权限时它将为 null,但当您旋转设备时,该值不为 null(ed)。
标签: android android-6.0-marshmallow