• 欢迎访问web前端中文站,JavaScript,CSS3,HTML5,web前端demo
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏web前端中文站吧

Android使用Hybrid框架VasSonic教程

JAVA web前端中文站 2年前 (2017-08-10) 3473次浏览 已收录 0个评论

类似于小程序这样的功能,腾讯尝试了很多方式来提高打开速度。包括冷热启动多进程、多线程并行、减冗余 JS 插件、预加载、webview 复用、反射、素材校验、进程冗余启动流程、redex 等,一步步走了一年多最终完善到 sonic。根据 sonic 的测试对比,我们发现采用 sonic 的结构确实在打开 H5 首屏效率上提升了不少。本文将详细的讲解使用 Android 设备配合 sonic 开发的示例教程。

更多精彩内容请看 web 前端中文站
http://www.lisa33xiaoq.net 可按 Ctrl + D 进行收藏

Android 使用 Hybrid 框架 VasSonic 教程

采用?VasSonic 我们首先需要做的是,下载 VasSonic 的 SDK。

在您的模块的 build.gradle 中添加 VasSonic gradle 插件作为依赖。

 compile 'com.tencent.sonic:sdk:1.0.0'

实现声音界面

实现一个扩展的类 SonicRuntime。

SonicRuntime 是与系统中整体运行信息进行交互的类,包括 Context,UA,ID(这是保存数据的唯一标识)和其他信息。

 /** * 下面是 SonicRuntime 的样本子类 */ 
 public class HostSonicRuntime extends SonicRuntime {     
 public HostSonicRuntime(Context context) {         
 super(context);}     /** @return 返回用户 UA  **/     
 @Override  public String getUserAgent() {         
 return "";}     
 /**  @return 返回用户的 ID。**/     
 @Override  public String getCurrentUserAccount() {         
 return "";}     
 /**  @return 返回用于保存 Sonic 缓存的文件路径。**/     
 @Override   public File getSonicCacheDir() {         
 String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "sonic/";         
 File file = new File(path.trim());         
 if(!file.exists()){             
 file.mkdir();}         
 return file;} }

实现一个扩展的子类 SonicSessionClient。

 /**  * SonicSessionClient 是一个精简的 API 类,将其公共 API 委托给后端 WebView 类实例,如 loadUrl 和 loadDataWithBaseUrl。 */ 
 public class SonicSessionClientImpl extends SonicSessionClient {     
 private WebView webView;     
 public void bindWebView(WebView webView) {         
 this.webView = webView;}     
 @Override   public void loadUrl(String url, Bundle extraData) {         
 webView.loadUrl(url);}     
 @Override   public void loadDataWithBaseUrl(String baseUrl,String data, 
 String mimeType, String encoding,String historyUrl) {         
 webView.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl);} }

Android 示例

这是一个简单的演示,演示如何创建一个使用 VasSonic 框架的 Android 活动。

 public class BrowserActivity extends Activity {     
 public final static String PARAM_URL = "param_url";     
 public final static String PARAM_MODE = "param_mode";     
 private SonicSession sonicSession;     
 @Override  protected void onCreate(Bundle savedInstanceState) {         
 super.onCreate(savedInstanceState);         
 Intent intent = getIntent();         
 String url = intent.getStringExtra(PARAM_URL);         
 int mode = intent.getIntExtra(PARAM_MODE, -1);         
 if (TextUtils.isEmpty(url) || -1 == mode) {             
 finish();             
 return;}         
 getWindow().addFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);         
 //步骤 1:如有必要初始化声音引擎,或者也许当应用程序创建 u 能做到这一点         
 if (!SonicEngine.isGetInstanceAllowed()) {             
 SonicEngine.createInstance(new SonicRuntimeImpl(getApplication()), new SonicConfig.Builder().build());}         
 SonicSessionClientImpl sonicSessionClient = null;         //步骤 2:创建 SonicSession         
 sonicSession = SonicEngine.getInstance().createSession(url,  new SonicSessionConfig.Builder().build());         
 if (null != sonicSession) {             
 sonicSession.bindClient(sonicSessionClient = new SonicSessionClientImpl());} else{             
 //只有在同一个声音会话已经运行时才会发生,             
 //可以将以下代码注释为默认模式。             
 throw new UnknownError("create session fail!");}         
 //步骤 3:BindWebView 为 sessionClient 和 bindClient 为 SonicSession          
 //在现实世界中,init 流可能花费很长的时间在启动         
 //运行时,初始化 CONFIGS ....          
 setContentView(R.layout.activity_browser);         
 WebView webView = (WebView) findViewById(R.id.webview);         
 webView.setWebViewClient(new WebViewClient() {             
 @Override   public void onPageFinished(WebView view, String url) {                 
 super.onPageFinished(view, url);                 
 if (sonicSession != null) {                     
 sonicSession.getSessionClient().pageFinish(url);}}             
 @TargetApi(21)   @Override   public WebResourceResponse shouldInterceptRequest(WebView view, 
 WebResourceRequest request) {                 
 return shouldInterceptRequest(view, request.getUrl().toString());}             
 @Override  public WebResourceResponse shouldInterceptRequest(WebView view, String url) {                 
 if (sonicSession != null) {                 
 //第 6 步:致电 sessionClient.requestResource 当主机允许应用程序                 
 //返回本地数据。                     
 return (WebResourceResponse) sonicSession.getSessionClient().requestResource(url);}                 
 return null;}});        
 WebSettings webSettings = webView.getSettings();          
 //步骤 4:绑定 javascript          
 //注意:如果 api 级别低于 17(android 4.2),addJavascriptInterface 有安全性         
 //问题,请使用 x5 或参见 https://developer.android.com/reference/android/webkit/          
 // WebView.html#addJavascriptInterface(java.lang.Object,java.lang.String)         
 webSettings.setJavaScriptEnabled(true);         
 webView.removeJavascriptInterface("searchBoxJavaBridge_");         
 intent.putExtra(SonicJavaScriptInterface.PARAM_LOAD_URL_TIME, System.currentTimeMillis());         
 webView.addJavascriptInterface(new SonicJavaScriptInterface(sonicSessionClient, intent), "sonic");         // init webview 设置          
 webSettings.setAllowContentAccess(true);         
 webSettings.setDatabaseEnabled(true);         
 webSettings.setDomStorageEnabled(true);         
 webSettings.setAppCacheEnabled(true);         
 webSettings.setSavePassword(false);         
 webSettings.setSaveFormData(false);         
 webSettings.setUseWideViewPort(true);         
 webSettings.setLoadWithOverviewMode(true);         
 //步骤 5:webview 已经准备就绪,只需告诉会话客户端绑定         
 if (sonicSessionClient != null) {             
 sonicSessionClient.bindWebView(webView);             
 sonicSessionClient.clientReady();}else{ 
 //默认模式              
 webView.loadUrl(url);}}     
 @Override   public void onBackPressed(){         
 super.onBackPressed();}     
 @Override   protected void onDestroy(){         
 if (null != sonicSession) {             
 sonicSession.destroy();             
 sonicSession = null;         
 }super.onDestroy();} }

简简单单的几十行代码,搞定你的 webview 的加载速度。

【注:本文源自网络文章资源,由站长整理发布】


web 前端中文站 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Android 使用 Hybrid 框架 VasSonic 教程
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址