В настоящее время у меня есть периодическая проблема, когда я получаю IllegalArgumentException
, когда звоню Activity.startLockTask()
. В моем приложении установлено приложение владельца устройства, которое позволило моему пакету автоматически подключаться.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
.
Кто-нибудь знает, в чем проблема?
Для справки:
Line 8853: https://android.googlesource.com/platform/frameworks/base/+/android-5.0.2_r1/services/core/java/com/android/server/am/ActivityManagerService.java
Использование '' mFocusedActivity' в ActivityManagerService', кажется, подразумевает, что 'onWindowFocusChanged (истина)' в действительности правильное место, чтобы сделать это. Отказ от ответственности: я еще не пытался использовать функцию блокировки задачи. –
Если вы подозреваете, каким образом вы перезагружаетесь, чтобы быть проблемой, возможно, вы могли бы перезагрузиться более упорядоченным образом? Свяжите службу, которая выполняется в отдельном процессе. Передайте ему «Binder», созданный в основном процессе. Попросите основной процесс разблокировать задачу, закончить и выйти. Попросите службу дождаться уведомления о смерти объекта, прежде чем пытаться возобновить свою деятельность. –
Это в основном то, что мы делаем.Я собираюсь создать простое приложение и посмотреть, могу ли я заставить его делать то же самое. – Randy