Weex 第一次打开App偶尔有不加载页面的问题

    学习 Weex 已有一个星期,Weex 确实坑多易栽。

    这两天发现在 android(iOS 未测试)中打开 weex 页面时,第一次启动 app 时,偶尔有打不开页面的情况,因为不是每次都打不开,首先确定不是 weex 页面问题,再者用官方的 PlayGround 也没有问题。很奇怪,开始 百度、google一通搜索。

    同道中人不乏出现这种情况的案例,按照各类解决方法一一验证,放到我这里都一一失效。

    既然网上找不到解决方案,就老老实实自己找原因;直接在 IWXRenderListener 的 onException 把错误代码和信息打出开,得到如下错误:

errCode=wx_create_instance_error

errMsg=createInstance fail!  

    拿着 errCode 又去一通搜索,终于找到有用的信息:

https://github.com/alibaba/weex/issues/3115

1903514970 commented on 22 Nov 2017 • edited 

可能是0.16.2版本weex sdk初始化有时候会慢一点,一般只会在app启动页面就渲染页面出现这种错误情况,所以可以在渲染之前可以判断一下,如果初始化成功了,渲染页面,如果没有成功,延时几秒再渲染页面。

    应该是 weex 还没有初始化完成的原因,这可能跟手机性能有一定的关系,而 PlayGround 程序没问题,应该是因为它有一个 Splash 界面,这个正好可以给 weex 初始化争取一些时间。

    解决办法就是在 onException 中判断 errCode 是否 wx_create_instance_error ,如果是则重新初始化 week 并加载页面。

    我把 weex 初始化和加载页面的代码写到 prepareWeex 函数中。然后在  IWXRenderListener 的 onException 中直接调用,如下:

@Override

public void onException(WXSDKInstance instance, String errCode, String msg) {

    if ("wx_create_instance_error".equals(errCode)) {

        prepareWeex();

    }

}

这样发生错误时直接再次初始化,可能会出现多次异常,所以按照上面的建议进行延时处理,把最终的代码改成下面的形式:

@Override

public void onException(WXSDKInstance instance, String errCode, String msg) {

    if ("wx_create_instance_error".equals(errCode)) {

        new Thread(new Runnable() {

            @Override

            public void run() {

                try {

                    Thread.sleep(200);

                }

                catch (InterruptedException e) {

                    e.printStackTrace();

                }

                Log.i("weex", "reload");

                runOnUiThread(new Runnable() {

                    @Override

                    public void run() {

                        prepareWeex();

                    }

                });

            }

         }).start();

    }

}

    题后记:如果 Weex 能提供 WeexIsReady 的方法,就不用这个搞了。

    另外如有更优雅的解决方案,请回复,谢谢。

你可能感兴趣的:(Weex 第一次打开App偶尔有不加载页面的问题)