Android weex 上手体验

作者: Kevin是只兔子 | 来源:发表于2017-08-17 21:00 被阅读612次

    我写之前就有预感,这必然是一片阅读量极低的文章

    相信大家都有听过react-native,weex,就算没听过,肯定也知道混发开发,因为这是一条踏上去就难以回头的装逼之路。但我相信其实大多数人都没有真正的开发过,然鹅,我已经在这条路上走了快两年了。

    前话
    16年4月份时候,我们这个不大的创业公司开始了嵌入react-native(后文简称RN)之路,我这个对前端一无所知的小白开发人员开始了填坑之旅。但这篇文章旨在上手weex,我这边就不细说RN了。
    17年5月份,由于RN在iOS端对长列表的内存回收机制并不理想(经常出现内存溢出而闪退),所以终于在嵌入RN一年以后,从我司项目中移除了。这也是我正是接手RN一周年之际。
    所以,如我所愿,又开始weex的填坑之旅。但不得不说,weex还是很好上手的,同时也解决了内存问题。

    什么是weex

    Weex能够完美兼顾性能与动态性,让移动开发者通过简捷的前端语法写出Native级别的性能体验,并支持iOS、安卓、YunOS及Web等多端部署。真正实现一次撰写,多平台运行。

    为什么要用weex

    东西是好东西,对于电商这类经常需要变动 APP 界面的尤其适用。看看天猫、淘宝首页你就知道了。但一定不会适用于所有人,需求千变万化,总有框架照顾不到的地方。我在下面也列几张我们用weex后的首页。

    平时的时候这个样子的,还是比较正常普通的:

    image.png

    促销的时候就这个样子了:

    image.png
    image.png
    image.png
    image.png

    大家能看出来变化还是特别大的,效果还是很明显的。第一张和最后一张都是我的截屏。中间两张是设计图,但最终效果是一模一样的,下面还有列表,由于数据太长了我就不截图了,大家有兴趣可以下载小红唇APP自己看一下。

    用原生如何实现?

    当我没用weex的时候,我想:这还非得用weex,我用native也能实现。我接不同的type展现不同的UI不就行了。这当然可以了,我始终相信一点,需求通过不同的技术手段都可以实现,只是实现方式的简易程度和灵活度的差别。

    用weex的优势?

    首先,weex是组件化的。什么是组件化?很好理解,他的每一块儿都是独立,我们只需根据不同的类型,将不同的组件组合在一起就行了,耦合度很低,当一个组件出问题不会影响其他组件渲染。但如果我用原生写,肯定是一页,然后根据不同的数据,展现出来,可能一个数据出错,我这一整页都是空白的。其次,weex还有一个好处,可以热更新这个页面,假如:线上时突然又想新增一种组件样式(例如banner吧),这个时候原生界面肯定说:等下个版本迭代给你新加。但weex就可以直接新增一种组件,然后发一个热更新文件,让原生加载新的js文件即可。

    Android 嵌入weex

    1.集成weex有两种模式,一种是源码集成,另一种sdk依赖。这里没有坑,就按照接入文档接入就行,有一点注意一下,用源码依赖可以拿到最新版本,但通过源码依赖拿的版本就会落后一些,但比较稳定。
    2.接入weex后需要自己实现一个ImageAdapter,用于展示图片,我这里把我写的ImageAdapter传到这里,大家可以自取,直达链接。我是基于glide框架的,当然也可以选择基于fresco,picasso等等。
    3.文档说只说了通过file的形式加载js文件,其实我们也可以通过URL的方式渲染,当我们调试的时候就需要连接服务器进行修改,也就是通过URL方式加载。

    //根据URL渲染
    mInstance.renderByUrl(getPageName(), url, options, jsonInitData, WXRenderStrategy.APPEND_ONCE);
    //根据文件渲染
    mWXSDKInstance.render(name, WXFileUtils.loadAsset(name+".js", this), null, null, WXRenderStrategy.APPEND_ASYNC);
    

    Android 嵌入weex devtools调试工具

    1.先通过npm install 安装项目依赖。之后运行npm run dev和npm run serve
    2.运行weex debug,就会开启一个chrome 的 inspect/debug 工具
    3.完成上面两个步骤,服务端就相当于配置成功了,之后我们只需要在我们的代码中配好相应的库,完善代码就可以了

    Android 实现热调试功能

    Android调试功能很简单就可以实现,但是热调试功能却花我一些时间。什么是热调试功能呢?当我修改服务器的代码,通过刷新浏览器,APP端数据也会跟着改变,这就是热调试。热调试功能是如何工作的呢?其实当我刷新时,会在APP的广播接收器接到相应的指令,此时我们重新reload相应的js文件即可。

      public void registerBroadcastReceiver(BroadcastReceiver receiver, IntentFilter filter) {
            mBroadcastReceiver = receiver != null ? receiver : new DefaultBroadcastReceiver();
            if (filter == null) {
                filter = new IntentFilter();
            }
            filter.addAction(IWXDebugProxy.ACTION_DEBUG_INSTANCE_REFRESH);
            filter.addAction(WXSDKEngine.JS_FRAMEWORK_RELOAD);
            LocalBroadcastManager.getInstance(getApplicationContext())
                    .registerReceiver(mBroadcastReceiver, filter);
            if (mReloadListener == null) {
                setReloadListener(new WxReloadListener() {
                    @Override
                    public void onReload() {
                        createWeexInstance();
                        renderPage();
                    }
                });
            }
            if (mRefreshListener == null) {
                setRefreshListener(new WxRefreshListener() {
                    @Override
                    public void onRefresh() {
                        createWeexInstance();
                        renderPage();
                    }
    
                });
            }
        }
    

    weex上手还是比较容易的,希望每个人都有一直学习的热情与能力~

    相关文章

      网友评论

      • woshilwz:app的体验还是很不错,希望楼主能分享更深入的文章!
      • YbSTGing:(用源码依赖可以拿到最新版本,但通过源码依赖拿的版本就会落后一些,但比较稳定)这一段是不是写错了,你应该是想说依赖和sdk的不同吧?
        Kevin是只兔子:@YbSTGing 这段是weex官网描述的
      • HUCHE:牛逼啊:+1:
        Kevin是只兔子:@HUCHE 谢谢优秀设计师扯大爷
      • 崔可一:兔兔写的真棒:smile:
        Kevin是只兔子:@崔可一 谢谢崔大神的鼓励,期待您的新作

      本文标题:Android weex 上手体验

      本文链接:https://www.haomeiwen.com/subject/tiamrxtx.html