TaskSnapshot保存应用画面截图快照的处理过程
在前面讨论TaskSnapshot的时候,
https://blog.csdn.net/aaajj/article/details/114208770
我们知道
TaskSnapshotController中也通过获取layer的方式获取了graphicBuffer,这样按recent按键的时候就可以看到每个应用的快照截图,
并且保存了图像信息到手机data/system_ce/0/snapshots中,这样,手机重启后,点击recent任务按键,还可以看到关机前的任务快照截图
这里我们来看看其写graphicBuffer对象数据到图片的实现,
在frameworks/base/services/core/java/com/android/server/wm/TaskSnapshotController.java
中,有
168 void snapshotTasks(ArraySet<Task>tasks) {
169 for (int i = tasks.size() - 1; i >= 0; i--) {
170 final Task task = tasks.valueAt(i);
171 final int mode = getSnapshotMode(task);
172 final TaskSnapshot snapshot;
173 switch (mode) {
174 case SNAPSHOT_MODE_NONE:
175 continue;
176 case SNAPSHOT_MODE_APP_THEME:
177 snapshot = drawAppThemeSnapshot(task);
178 break;
179 case SNAPSHOT_MODE_REAL:
180 snapshot = snapshotTask(task);
181 break;
182 default:
183 snapshot = null;
184 break;
185 }
186 if (snapshot != null) {
187 final GraphicBuffer buffer = snapshot.getSnapshot();
188 if (buffer.getWidth() == 0 || buffer.getHeight() == 0) {
189 buffer.destroy();
190 Slog.e(TAG, "Invalid task snapshot dimensions " + buffer.getWidth() + "x"
191 + buffer.getHeight());
192 } else {
193 mCache.putSnapshot(task, snapshot);
194 mPersister.persistSnapshot(task.mTaskId, task.mUserId, snapshot);
195 if (task.getController() != null) {
196 task.getController().reportSnapshotChanged(snapshot);
197 }
198 }
199 }
200 }
201 }
mPersister.persistSnapshot(task.mTaskId, task.mUserId, snapshot);
frameworks/base/services/core/java/com/android/server/wm/TaskSnapshotPersister.java
101 voidpersistSnapshot(inttaskId, intuserId, TaskSnapshotsnapshot) {
102 synchronized (mLock) {
103 mPersistedTaskIdsSinceLastRemoveObsolete.add(taskId);
104 sendToQueueLocked(new StoreWriteQueueItem(taskId, userId, snapshot));
105 }
106 }
275StoreWriteQueueItem(int taskId, int userId, TaskSnapshot snapshot) {
276 mTaskId = taskId;
277 mUserId = userId;
278 mSnapshot = snapshot;
279 }
280
338 boolean writeBuffer() {
339 final Bitmap bitmap = Bitmap.createHardwareBitmap(mSnapshot.getSnapshot());
340 if (bitmap == null) {
341 Slog.e(TAG, "Invalid task snapshot hw bitmap");
342 return false;
343 }
344
345 final Bitmap swBitmap = bitmap.copy(Config.ARGB_8888, false /* isMutable */);
346 final File reducedFile = getReducedResolutionBitmapFile(mTaskId, mUserId);
347 final Bitmap reduced = mSnapshot.isReducedResolution()
348 ? swBitmap
349 : Bitmap.createScaledBitmap(swBitmap,
350 (int) (bitmap.getWidth() * REDUCED_SCALE),
351 (int) (bitmap.getHeight() * REDUCED_SCALE), true /* filter */);
352 try {
353 FileOutputStream reducedFos = new FileOutputStream(reducedFile);
354 reduced.compress(JPEG, QUALITY, reducedFos);
355 reducedFos.close();
356 } catch (IOException e) {
357 Slog.e(TAG, "Unable to open " + reducedFile +" for persisting.", e);
358 return false;
359 }
360
361 // For snapshots with reduced resolution, do not create or save full sized bitmaps
362 if (mSnapshot.isReducedResolution()) {
363 return true;
364 }
365
366 final File file = getBitmapFile(mTaskId, mUserId);
367 try {
368 FileOutputStream fos = new FileOutputStream(file);
369 swBitmap.compress(JPEG, QUALITY, fos);
370 fos.close();
371 } catch (IOException e) {
372 Slog.e(TAG, "Unable to open " + file + " for persisting.", e);
373 return false;
374 }
375 return true;
376 }
377 }
Bitmap bitmap = Bitmap.createHardwareBitmap(mSnapshot.getSnapshot());
TaskSnapshot保存应用画面截图快照的处理过程相关推荐
- js截屏 video_js获取video任意时间的画面截图
js获取video任意时间的画面截图 更新时间:2019-04-16 09:12:00点击次数:1757次 首先就是要把视频加载出来,然后使用canvas.getContext('2d').drawI ...
- Python win32com 控制excel自动刷新保存数据并截图发送到企业微信
Python win32com 控制excel自动刷新保存数据并截图发送到企业微信 业务需求 功能模块 爬虫 运行excel宏,刷新保存excel数据 指定区域截图 发送图片到企业微信 业务需求 每天 ...
- 计算机如何存储图片的,电脑保存不了截图怎么办?
原标题:电脑保存不了截图怎么办? 电脑系统的截图功能,实际使用可以说是十分方便的,而且还可以设置进行延迟操作,十分贴心. 但是,最近有位用户想要使用截图功能的时候,却发现系统截图功能失效了,截图之后没 ...
- Java实现鼠标右键快捷保存QQ微信截图和复制的文字
Java实现鼠标右键快捷保存QQ微信截图和复制的文字 首先,我们能实现保存剪贴板内容,以下是我的源代码和解释 import java.awt.*; import java.awt.datatransf ...
- 计算机截屏无法保存,win10系统截图无法保存的两种解决方法
截图功能的重要性相信大家都知道,操作电脑经常会用到.win10系统自带有截图工具,不需要下载其他截图软件,有时候使用win10截图后竟然无法保存图片,怎么回事?这种情况可能是我们系统的组件出现问题,我 ...
- win 10 自动截图保存及收藏截图文件夹,快速打开查看
一.win 10 shift + win + s截图后的自动保存位置 打开win 10 自动保存截图的文件夹位置,一般"C:\Users\zhanghc\"根据自己电脑实际登录用户 ...
- python网页保存为图片_使用Python保存网页上的图片或者保存页面为截图
Python保存网页图片这个是个比较简单的例子,网页中的图片地址都是使用'http://.....jpg'这种方式直接定义的. 使用前,可以先建立好一个文件夹用于保存图片,本例子中使用的文件夹是 d: ...
- python将网页保存为图片_使用Python保存网页上的图片或者保存页面为截图
# -*- coding: UTF-8 -*- import os,re,urllib,uuid #首先定义云端的网页,以及本地保存的文件夹地址 urlPath='http://gamebar.com ...
- 百度服务器保存信息多久,百度快照在百度服务器里保存多长时间???
2005-09-28 回答 大家都百度是很厉害的(而且刚好碰上百度最近在调整算法),不会无缘无故发飙,快照回档,一定是网站在某个方面出现了问题. 之所以会快照回档,原因是这段时间为了优化改了titie ...
最新文章
- 关于外挂新手最常见的30个问题
- Axure tabstrip and different control
- 【数据结构与算法】【算法思想】位图
- Find 7轻装版和正式版存储内存方面区别
- 如何保养DVD刻录机
- 吴恩达机器学习 6.神经网络学习
- 【论文写作】毕业论文写作的基本要求讲解
- linux每天进步一点点-7月15日
- 基于深度学习的音乐推荐系统简述
- EXCEL2007导入SQL生成新表并插入数据
- 忘记准考证号获取四六级成绩的方法
- 在keil中创立一个头文件
- 【尚硅谷|韩顺平】数据结构和算法
- 如何解决万能地图下载器下载的地图和选择范围不一致
- matlab怎么读取指定坐标的RGB值
- 需要类型转换时请为模板定义非成员函数——条款46
- 10个的常用PyCharm插件
- PCA9540BDP 电子元器件 封装MSOP8 批次21
- STM32F4 DAC
- 入职新公司,如何快速凸显个人价值