秋梦无痕

一场秋雨无梦痕,春夜清风冻煞人。冬来冷水寒似铁,夏至京北蟑满城。

Avatar

android界面重绘异常(硬件)问题处理

问题描述:
台电(Teclast)的P80H平板电脑,系统版本Android 7.0,内核版本3.18.35
在一个横屏Activity中,使用StartActivityForResult启动了一个竖屏Activity,在这个Activity返回的时候,原来的横屏Activity的界面会出现绘制异常。
有时候是屏幕左边一半是黑的,有时候是屏幕上边一块的左边半边是黑的。

检查发现:
程序本身没有问题,根据按钮正确的位置去点按钮,还能点到。
如果关一下屏幕再点亮,也能恢复正常。
排除是代码问题,但是,虽然不是代码问题,还是要通过代码来解决。。。(泪目)
怀疑是重绘的时候,在Device Context(借用VC里的概念)上绘制出了问题。
所以基本思路是强制重绘屏幕。

问题解决:
因为调起的Activity执行结束后,会依次调用onActivityResult和onResume,所以最开始的尝试,是在这两个函数里尝试重绘屏幕,没有任何效果。
经过多次尝试,发现延迟执行屏幕重绘就好了。
感觉应该是onResume之后,放在显存里的东西不对。

代码:

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    boolean needRepaint = false;
    // 确定是否需要重绘的代码省略
    if (needRepaint) {
        new Handler().postDelayed(new Runnable() {
            public void run() {
                getWindow().getDecorView().invalidate(); // 强制重绘屏幕
            }
        }, 50);
    }
}