在前面讨论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

最后调用到write方法

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 = Bitmap.createHardwareBitmap(mSnapshot.getSnapshot());

来把GraphicBuffer数据转换为Bitmap对象,

再通过调用compress方法保存到图片文件中。

TaskSnapshot保存应用画面截图快照的处理过程相关推荐

  1. js截屏 video_js获取video任意时间的画面截图

    js获取video任意时间的画面截图 更新时间:2019-04-16 09:12:00点击次数:1757次 首先就是要把视频加载出来,然后使用canvas.getContext('2d').drawI ...

  2. Python win32com 控制excel自动刷新保存数据并截图发送到企业微信

    Python win32com 控制excel自动刷新保存数据并截图发送到企业微信 业务需求 功能模块 爬虫 运行excel宏,刷新保存excel数据 指定区域截图 发送图片到企业微信 业务需求 每天 ...

  3. 计算机如何存储图片的,电脑保存不了截图怎么办?

    原标题:电脑保存不了截图怎么办? 电脑系统的截图功能,实际使用可以说是十分方便的,而且还可以设置进行延迟操作,十分贴心. 但是,最近有位用户想要使用截图功能的时候,却发现系统截图功能失效了,截图之后没 ...

  4. Java实现鼠标右键快捷保存QQ微信截图和复制的文字

    Java实现鼠标右键快捷保存QQ微信截图和复制的文字 首先,我们能实现保存剪贴板内容,以下是我的源代码和解释 import java.awt.*; import java.awt.datatransf ...

  5. 计算机截屏无法保存,win10系统截图无法保存的两种解决方法

    截图功能的重要性相信大家都知道,操作电脑经常会用到.win10系统自带有截图工具,不需要下载其他截图软件,有时候使用win10截图后竟然无法保存图片,怎么回事?这种情况可能是我们系统的组件出现问题,我 ...

  6. win 10 自动截图保存及收藏截图文件夹,快速打开查看

    一.win 10 shift + win + s截图后的自动保存位置 打开win 10 自动保存截图的文件夹位置,一般"C:\Users\zhanghc\"根据自己电脑实际登录用户 ...

  7. python网页保存为图片_使用Python保存网页上的图片或者保存页面为截图

    Python保存网页图片这个是个比较简单的例子,网页中的图片地址都是使用'http://.....jpg'这种方式直接定义的. 使用前,可以先建立好一个文件夹用于保存图片,本例子中使用的文件夹是 d: ...

  8. python将网页保存为图片_使用Python保存网页上的图片或者保存页面为截图

    # -*- coding: UTF-8 -*- import os,re,urllib,uuid #首先定义云端的网页,以及本地保存的文件夹地址 urlPath='http://gamebar.com ...

  9. 百度服务器保存信息多久,百度快照在百度服务器里保存多长时间???

    2005-09-28 回答 大家都百度是很厉害的(而且刚好碰上百度最近在调整算法),不会无缘无故发飙,快照回档,一定是网站在某个方面出现了问题. 之所以会快照回档,原因是这段时间为了优化改了titie ...

最新文章

  1. 关于外挂新手最常见的30个问题
  2. Axure tabstrip and different control
  3. 【数据结构与算法】【算法思想】位图
  4. Find 7轻装版和正式版存储内存方面区别
  5. 如何保养DVD刻录机
  6. 吴恩达机器学习 6.神经网络学习
  7. 【论文写作】毕业论文写作的基本要求讲解
  8. linux每天进步一点点-7月15日
  9. 基于深度学习的音乐推荐系统简述
  10. EXCEL2007导入SQL生成新表并插入数据
  11. 忘记准考证号获取四六级成绩的方法
  12. 在keil中创立一个头文件
  13. 【尚硅谷|韩顺平】数据结构和算法
  14. 如何解决万能地图下载器下载的地图和选择范围不一致
  15. matlab怎么读取指定坐标的RGB值
  16. 需要类型转换时请为模板定义非成员函数——条款46
  17. 10个的常用PyCharm插件
  18. PCA9540BDP 电子元器件 封装MSOP8 批次21
  19. STM32F4 DAC
  20. 入职新公司,如何快速凸显个人价值

热门文章

  1. 18天精读掌握《费曼物理学讲义卷一》 第15天 2019/7/2
  2. 理科男用这种方式泡妞,真的能迎娶白富美吗?!
  3. 模拟登陆手机版新浪微博
  4. Hadoop 文件系统与 COS 之间的数据迁移
  5. web开发一定时间没操作_Web开发—明智地投资您的时间
  6. html中数字效果,使用css实现电子数字效果
  7. 如何证明圆锥面积=1/3圆柱面积?
  8. 【机器学习的数学基础】(十五)信息论
  9. ldc-uni-cli发布
  10. 电信光猫重置后与路由器重新配置实现正常上网