2015-11-02 82 views
20

觀察:手動更改Android應用程序的權限會終止此應用程序的所有進程。Android棉花糖動態權限更改殺死所有應用程序

過程:轉到設置 - >應用程序選擇應用程序和權限。禁用其中一個權限。 設備:的Nexus運行Android 6.0棉花糖

當我開始從發射應用6設備,它開始那是在上面這個應用程序的權限修改前的活動。這與我們通過從UI多任務菜單中劃出應用程序來終止應用程序過程的行爲不同。在這種情況下,首先創建啓動器活動。 也就是說,爲了讓應用程序在更改權限後啓動時正常工作,它不能依賴啓動器啓動活動。

此預期行爲在所有Android 6.0+設備上都具有動態權限嗎?爲什麼從應用程序進程被從UI多任務菜單中刪除時被終止的行爲有所不同?

+0

如果你處理了這個問題,你能解釋你是如何做到的嗎? – MiloRambaldi

回答

12

也就是說,對於應用程序在更改權限後啓動時正常工作,它不能依賴啓動器啓動活動。

多年來一直如此。例如,如果您的流程由於內存條件不足而終止,但用戶最近(例如,在過去的半小時內),用戶訪問概覽屏幕(您稱爲「UI多任務菜單「),並返回到你的應用程序,控制將返回到用戶最後一次的任何活動(即,已經在BACK棧的頂部)的新實例。

這是所有Android 6.0+設備都具有動態權限的預期行爲嗎?

是的。在所有以前的Android設備中,對於其他情況下的預期行爲,您的流程已終止,但您的任務仍未完成且最近。

爲什麼從應用程序進程被從UI多任務菜單中滑出來而導致行爲有所不同?

將任務從總覽屏幕上移開將刪除該任務。因此,當用戶嘗試返回到您的應用(例如,通過主屏幕啓動器圖標)時,該任務不能被重用。

+4

我不明白他們爲什麼保持權限更改的任務。爲什麼不殺死進程並刪除任務?它迫使我們檢查應用程序中任何需要的權限,而我們可能只有一個入口點來請求它們(至少是關鍵的)。你知道在權限更改後是否有辦法強制執行新任務?我試圖混合不同的活動配置,但我失敗了...... – tbruyelle

+6

@tbruyelle:「你知道在權限更改後是否有辦法強制執行新任務嗎?」 - 沒有什麼特定的權限更改。如果沒有別的,檢查是否在每個'onCreate()'的頂部持有權限(可能通過一個普通的活動基類),如果你缺少一些關鍵的東西,可以用'Intent '標誌清除任務,所以你的'requestPermissions()'調用集中處理。 – CommonsWare

+0

謝謝我正在設計類似的東西,我會繼續。 – tbruyelle

1

我想殺人的基本原理如下。這關乎併發性。系統可以選擇3種可能的方法之一:

  1. 靜默地撤銷權限。該應用程序無法檢查這一點,因爲在任何「檢查」和「使用」時刻之間仍然可能會發生撤銷。

  2. 通知應用程序。這種通知必須由應用程序確認,這意味着它的線程不會再訪問禁用的API,系統可能會立即關閉API。這是優美的,但很難爲缺乏經驗的程序員編程。

  3. 要殺死該應用程序,確保下次啓動它將正確認識到該權限已被撤銷。