客戶反饋的問題,設備上使用狀態欄中“長截屏”功能,截屏失敗且出現系統卡死問題。
在此記錄該問題的處理
一現象:
設備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~