进入多任务界面,发现taskview始终是黑屏的原因:
- 应用本身设置了disable screenshot属性,其一是在window侧添加了WindowManager.LayoutParams.FLAG_SECURE,造成tasksnaposhot黑屏截图。其二是在activity侧调用了setDisablePreviewScreenshots(true)这个方法造成黑屏,第二种禁止截屏的方法是Android13引入的。
以上设置禁止截屏仅仅针对task本身的window截屏,不是整个屏幕禁止截屏。
设置上面相关禁止截屏属性设置后代码会走向SNAPSHOT_MODE_APP_THEME,其他时候走的是SNAPSHOT_MODE_REAL,如下代码:
/**
* This is different than {@link #recordTaskSnapshot(Task, boolean)} because it doesn't store
* the snapshot to the cache and returns the TaskSnapshot immediately.
*
* This is only used for testing so the snapshot content can be verified.
*/
@VisibleForTesting
TaskSnapshot captureTaskSnapshot(Task task, boolean snapshotHome) {
final TaskSnapshot snapshot;
if (snapshotHome) {
snapshot = snapshotTask(task);
} else {
switch (getSnapshotMode(task)) {
case SNAPSHOT_MODE_NONE:
return null;
case SNAPSHOT_MODE_APP_THEME:
snapshot = drawAppThemeSnapshot(task);
break;
case SNAPSHOT_MODE_REAL:
snapshot = snapshotTask(task);
break;
default:
snapshot = null;
break;
}
}
return snapshot;
}
2.应用在snapshot的过程中自己在生命周期内部onpause-onstop的过程中对当前窗口进行相关view黑屏处理。