Android开发框架Android-Sun-Framework(三)之Hybrid

一. 写在前面

Android-Sun-Framework是一个Android组件化开发框架,可用于中大型项目。对应框架的一系列文章包含内容:设计思路、实现、如何使用等。我的宗旨是:授之以渔而不是授之以鱼! 同时我也感谢大家对我的支持。

欢迎Star or Follow我的GitHub

欢迎搜索微信公众号SamuelAndroid关注我,定期推送原创文章和代码。

系列文章:

Android开发框架Android-Sun-Framework(一)
Android开发框架Android-Sun-Framework(二)
Android开发框架Android-Sun-Framework(三)

以上两篇文章分享了网络,图片加载,推送等内容,今天给大家带了的是本框架最重要部分Hybrid的封装

近两年来混合开发越来越受欢迎,甚至让我们做原生开发感觉到了危机,这里不再讨论他的优越性。这么火的一个功能,我们的框架肯定要支持的。

框架介绍

Android开发框架Android-Sun-Framework(三)之Hybrid_第1张图片

该框架支持两种方式接入:SuperWebView, SuperWebFragment
接触过APICloud的童鞋都知道,他们只支持以Activity的形式,所以使用受限比较明显。我们这次的封装规避了他们的问题,是接入更加灵活,同时又参照了他们,做了一些相似的实现(当前只是把基础的且分钟重要的内容实现了,** 后面会参照APICloud的官方文档陆续增加,敬请期待**)

如何使用

我这里就不再说明底层是如何实现的,想了解这块的可以查看源码,或者关注我的微信公众号(搜索SamuelAndroid添加关注),给我留言!

  1. 导入
    当前还没有发布到jcenter,需要手工导入,这里不再赘述,可以参照这篇文章

  2. native封装的接口:
    详细看下面的注释

    // 发送数据
    void sendDataToHtml5(String data);
    //发送数据 
    void sendDataToHtml5(String data, CallBackFunction responseCallback);

    //发送事件
    void sendEventToHtml5(String handlerName);
   //发送事件
    void sendEventToHtml5(String handlerName, CallBackFunction callBack);
    //发送事件
    void sendEventToHtml5(String handlerName, String data, CallBackFunction callBack);

    // 添加默认事件处理,即数据,对应于js的mobileAPI.send
   setDefaultHtml5EventListener(new Html5EventListener() {
            @Override
            public void handler(String data, CallBackFunction function) {
                if (function != null) {
                    function.onCallBack("孙华辉");
                }
            }
        });

  //监听H5发送的事件,对应H5的accessNative
   addHtml5EventListener("eventname", new Html5EventListener() {

    @Override
    public void handler(String data, CallBackFunction function) {
                
                function.onCallBack("submitFromWeb exe, response data 中文 from Java");
    }
});
  1. H5的封装--注入完成
    本框架会在HTML加载完成后动态注入一段js代码,框架里的一些方法只有等到注入完成后才能使用,为了让前段知道调用时机,我们把这个状态发送给了前端,有两种方式可以拿到注入完成的回调:
    a. 通过事件:
document.addEventListener(
       'onReady'
       , function() {
              //TODO 
       },
       false
);

b. 通过回调:这里我多说两句,由于本人前端知识薄弱,这种方式的实现着实花了我一段时间,主要也是为了和APICloud具有同样的使用方式,所以这篇文章相隔上一篇时间较久。

appReady = function(){
      // TODO
}
  1. H5的封装--生命周期(resume、pause)
    做安卓开发的童鞋对于onResume,onPause这两个生命周期再熟悉不过,开发过程中我们会在onResume回调中做一些处理,所以本框架也将这两个生命周期传给了H5,具体使用方法如下:
appReady = function(){
      ...
      resume = function(){
              // TODO 可以这里加载数据
      }

      pause = function(){
              // TODO  
      }
}
  1. H5的封装--事件
// 接收native发送过来的数据,对应native的sendDataToHtml5的处理
mobileAPI.init(function(message, responseCallback) {
        responseCallback(data);
});
//监听native发送的事件
mobileAPI.addEventListener("functionInJs", function(data, responseCallback) {
         responseCallback(responseData);
 });

//发送数据到native
window.mobileAPI.send(
         data
         , function(responseData) {
         document.getElementById("show").innerHTML = "repsonseData from java, data = " + responseData
      }
);

// 发送事件到native
window.mobileAPI.accessNative(
          'submitFromWeb'
          , {'param': '中文测试'}
          , function(responseData) {
          document.getElementById("show").innerHTML = "send get responseData from java, data = " + responseData
     }
);

总结:

框架已经把最基础的实现了,后面只需要使用这些基础功能做一些封装就好了,后面会补一些常用的功能。项了解更多内容,建议大家还是静下心来撸一遍代码,来来让我们一起左手右手一个慢动作!!!

你可能感兴趣的:(Android开发框架Android-Sun-Framework(三)之Hybrid)