我目前有個週期性問題,當我撥打Activity.startLockTask()
時,我得到IllegalArgumentException
。我的應用程序安裝了一個設備所有者應用程序,允許我的程序包自動鎖定自己。Activity.startLockTask()偶爾會拋出IllegalArgumentException
下面的代碼正在檢查以確保我的包可以鎖定自己。如果它可以,那麼它釘住自己。
代碼:
if (dpm.isLockTaskPermitted(getPackageName())) {
super.startLockTask();
}
的logcat:
java.lang.IllegalArgumentException: Invalid task, not in foreground
at android.os.Parcel.readException(Parcel.java:1544)
at android.os.Parcel.readException(Parcel.java:1493)
at android.app.ActivityManagerProxy.startLockTaskMode(ActivityManagerNative.java:5223)
at android.app.Activity.startLockTask(Activity.java:6163)
的問題是我的應用程序需要偶爾重新啓動。因此,我們取消固定,完成活動並重新開始一項新任務,然後退出我們的流程。當活動恢復時,它會嘗試固定自己 - 有時會起作用 - 有時不起作用。我相信我們如何重新啓動可能是拋出異常的原因,但是這並不重要,因爲新的活動處於前臺和IS的焦點。
一旦活動無法固定,只要它嘗試就會繼續失敗:如果我坐在那裏嘗試每隔5秒固定一次任務,則每次都會繼續失敗。我試過onCreate
,onWindowFocusChanged
,onResume
和onStart
。
有誰知道這個問題可能是什麼?
在'ActivityManagerService'使用mFocusedActivity'的'似乎暗示'onWindowFocusChanged(真)'其實是在做正確的地方這個。免責聲明:我還沒有嘗試使用任務鎖定功能。 –
如果您懷疑您重新啓動的方式是問題,那麼也許您可以以更有序的方式重新啓動?綁定在單獨進程中運行的服務。將它傳遞給主流程中創建的「Binder」。讓主進程解鎖任務,完成並退出。在嘗試重新生成活動之前,請讓服務等待對象死亡通知。 –
這基本上就是我們正在做的。我要創建一個簡單的應用程序,看看我能否做到這一點。 – Randy