-
Notifications
You must be signed in to change notification settings - Fork 27
Description
Sometimes, when you call RNLockTask.startLockTask(), you can get this error: Invalid task, not in foreground. I don't know a clear reproducible way to trigger this error yet, but i got a lot of error reportings on Sentry.
From further investigation i found out that this error is thrown in this part of the ActivityManagerService implementation
(line 8853: https://android.googlesource.com/platform/frameworks/base/+/android-5.0.2_r1/services/core/java/com/android/server/am/ActivityManagerService.java):
void startLockTaskMode(TaskRecord task) {
final String pkg;
synchronized(this) {
pkg = task.intent.getComponent().getPackageName();
}
boolean isSystemInitiated = Binder.getCallingUid() == Process.SYSTEM_UID;
if (!isSystemInitiated && !isLockTaskAuthorized(pkg)) {
final TaskRecord taskRecord = task;
mHandler.post(new Runnable() {
@Override
public void run() {
mLockToAppRequest.showLockTaskPrompt(taskRecord);
}
});
return;
}
long ident = Binder.clearCallingIdentity();
try {
synchronized(this) {
// Since we lost lock on task, make sure it is still there.
task = mStackSupervisor.anyTaskForIdLocked(task.taskId);
if (task != null) {
if (!isSystemInitiated &&
((mFocusedActivity == null) || (task != mFocusedActivity.task))) {
throw new IllegalArgumentException("Invalid task, not in foreground");
}
mStackSupervisor.setLockTaskModeLocked(task, !isSystemInitiated);
}
}
} finally {
Binder.restoreCallingIdentity(ident);
}
}it seems that there is no focused activity, but i am almost 100% sure the startLockTask() is called when the app is in foreground.
i submitted this ticket to raise awareness and maybe if someone has faced this issue, they might have some good insight to handle it.