2

我試圖在permisison更改期間讓我的頭繞着應用程序及其組件生命週期。Android活動和片段生命週期在M中被撤銷權限後

考慮:

targetSdk = 23 
    compileSdk = 23 

假設我有顯示我的應用程序打開一個片段,並得到了設置和撤銷許可。

我的理解是重啓進程,但是沒有一個片段生命週期方法被調用(onCreateView等),這導致我的測試工具應用程序在返回到應用程序時運行崩潰。

我接觸的片段的按鈕,從撤銷許可,回國後:

'android.os.IBinder android.widget.EditText.getWindowToken()' on a null object reference 

此代碼是用於隱藏屏幕鍵盤,如果它顯示,如果需要,我可以刪除它,但問題這裏是爲什麼如果重新啓動進程,是不是重新創建片段?

編輯:做了更多的日誌記錄。所以它看起來像片段/活動正在調用生命週期方法,但似乎重新初始化並不完全。

+0

應該有被終止的過程沒有什麼區別,由於權限撤銷和被終止的任何其他原因,你的過程。 – CommonsWare

+0

聽起來像你在這裏做了其他錯誤。 – Kitesurfer

+0

您提到這是在測試過程中。你的測試是否參考了「活動」?潛在地,你的測試可能會被一個已經被破壞並且沒有窗口的活動所控制。在這種情況下,您的測試工具應該獲得對新創建活動的引用。 – Budius

回答

1

當您從應用程序設置中撤消權限時 - 活動重新啓動並且它也是組件。 但在onCreate(...)savedInstanceState不等於null。

因此,你可以使用這種破解:

if (savedInstanceState != null) { 
    ... 
}