我目前有个周期性问题,当我拨打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