requestPermission()不会完全重新创建活动堆栈

Ebo*_*ike 5 android android-permissions android-6.0-marshmallow

我有活动A启动活动B.此活动然后请求READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE.在Android 6.0上,这会打开权限对话框(一旦对话框弹出就会立即销毁活动B).但是,无论用户选择什么,系统都将返回活动A.

请求其他权限在其他地方工作正常,但我认为外部存储权限是那些,正如文档警告的那样,"需要重新启动应用程序","系统将重新创建活动堆栈".

我的问题是活动B永远不会重新创建,更不用说onRequestPermissionsResult被调用了.我原以为"重新创建活动堆栈"涉及再次启动活动B,理想情况下onRequestPermissionResult是在它上面调用它.我该怎么办呢?

Sni*_*kow 9

一旦弹出对话框,它会立即销毁活动B.

这对我来说听起来很怪异.活动B应在此时暂停(并可能停止),但不会被销毁.你确定你没有打电话finish()或使用某些财产noHistory吗?

您可以在事件日志中找到am_finish_activity和/或am_destroy_activity打印活动被销毁的原因.我使用BACK按钮离开Gmail的示例(注意app-requestfinish-imm原因):

$ adb logcat -bevents
I/am_finish_activity( 1155): [0,947820256,3228,com.google.android.gm/.ConversationListActivityGmail,app-request]
I/am_pause_activity( 1155): [0,947820256,com.google.android.gm/.ConversationListActivityGmail]
I/am_on_paused_called(17619): [0,com.google.android.gm.ConversationListActivityGmail]
I/am_home_stack_moved( 1155): [0,1,0,0,prevFinished]
I/wm_task_moved( 1155): [3162,1,1]
I/am_focused_activity( 1155): [0,com.android.launcher/com.android.launcher2.Launcher]
I/am_resume_activity( 1155): [0,285205047,3162,com.android.launcher/com.android.launcher2.Launcher]
I/am_on_resume_called(24956): [0,com.android.launcher2.Launcher]
I/am_destroy_activity( 1155): [0,947820256,3228,com.google.android.gm/.ConversationListActivityGmail,finish-imm]
Run Code Online (Sandbox Code Playgroud)

不确定这些原因字符串有多详细,但是如果你真的很难搞清楚它,那么值得一看.