Android10 系统截屏功能异常的处理

客户反馈的问题,设备上使用状态栏中“长截屏”功能,截屏失败且出现系统卡死问题。

在此记录该问题的处理

一现象:

设备A10上使用系统“长截屏”功能,出现截屏失败,系统死机。

二复现问题并分析

使用设备操作该功能,该问题必现。导出ylog 

A10 日志导出指令:

adb pull /storage/emulated/0/ylog  curscreenanr2/              //后面的路径是存放ylog日志的文件夹名称

三分析ylog

ylog目录如图,crash中有崩溃log 详细如下:

C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: Process: com.android.systemui:screenshot, PID: 4405
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: java.lang.RuntimeException: An error occurred while executing doInBackground()
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	at android.os.AsyncTask$4.done(AsyncTask.java:399)
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	at java.util.concurrent.FutureTask.run(FutureTask.java:271)
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	at java.lang.Thread.run(Thread.java:919)
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: Caused by: java.lang.IllegalArgumentException: width must be > 0
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	at android.graphics.Bitmap.checkWidthHeight(Bitmap.java:450)
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	at android.graphics.Bitmap.createBitmap(Bitmap.java:874)
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	at android.graphics.Bitmap.createBitmap(Bitmap.java:836)
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	at com.android.systemui.screenshot.CompareUtils.CompareCropedBitmap(CompareUtils.java:39)
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	at com.android.systemui.screenshot.GlobalScreenshot$CompareTask.doInBackground(GlobalScreenshot.java:843)
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	at com.android.systemui.screenshot.GlobalScreenshot$CompareTask.doInBackground(GlobalScreenshot.java:817)
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	at android.os.AsyncTask$3.call(AsyncTask.java:378)
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
C017E3F  03-05 15:48:17.472  4405  4456 E AndroidRuntime: 	... 4 more
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: Process: com.android.systemui:screenshot, PID: 4543
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: java.lang.RuntimeException: An error occurred while executing doInBackground()
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	at android.os.AsyncTask$4.done(AsyncTask.java:399)
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	at java.util.concurrent.FutureTask.run(FutureTask.java:271)
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	at java.lang.Thread.run(Thread.java:919)
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: Caused by: java.lang.IllegalArgumentException: width must be > 0
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	at android.graphics.Bitmap.checkWidthHeight(Bitmap.java:450)
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	at android.graphics.Bitmap.createBitmap(Bitmap.java:874)
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	at android.graphics.Bitmap.createBitmap(Bitmap.java:836)
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	at com.android.systemui.screenshot.CompareUtils.CompareCropedBitmap(CompareUtils.java:39)
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	at com.android.systemui.screenshot.GlobalScreenshot$CompareTask.doInBackground(GlobalScreenshot.java:843)
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	at com.android.systemui.screenshot.GlobalScreenshot$CompareTask.doInBackground(GlobalScreenshot.java:817)
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	at android.os.AsyncTask$3.call(AsyncTask.java:378)
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
C01ACAB  03-05 15:48:48.029  4543  4630 E AndroidRuntime: 	... 4 more

可以看到关键日志

查看packages/SystemUI/src/com/android/systemui/screenshot/CompareUtils.java中,

设备分辨率w*h=240x320. 图上部分值为0,所以异常,

四解决方案:

将以上的margin数据修改为10,使其计算结果值>0即可

OVER~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值