Android HTML5多线程&文件上传

WebWorker,EventSource,Ajax,WebSocket,WebRTC共同构成网络生态中主要的部分,WebWoker多线程的出现,使得Javascript更容易实现异步编程,特别是在耗时任务使得Javascript更加健壮。

一.支持多线程和本地数据存储
  1. 支持LocalStorage数据存储

webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setAppCacheMaxSize(1024*1024*25);
String appCachePath = ctx.getApplicationContext().getCacheDir().getAbsolutePath();
webview.getSettings().setAppCachePath(appCachePath);
webview.getSettings().setAllowFileAccess(true);
webview.getSettings().setAppCacheEnabled(true);

2.支持多线程(Wokers与ShareWorker API)

settings.setAllowFileAccess(true);
settings.setAppCacheEnabled(true);
settings.setAllowContentAccess(true);
settings.setAllowFileAccessFromFileURLs(true);


二.实现多线程

1.实现workers.js子线程

var i=0;

function timedCount()
{
i=i+1;
self.postMessage(i);
setTimeout("timedCount()",500);
}
self.onmessage = function(event) {
  var method = event.data.method;
  var args = event.data.args;

   self.postMessage({method: method, reply: args });
  
  };
timedCount();

在html5中实现WebWorker的调用该

<script type="text/javascript" >
if(!!window.Worker&& typeof(Worker)!=="undefined")
   {
      window.worker = new Worker("./workers.js");
      window.worker.onmessage = function (event)
      {
          console.dir(event.data);
          document.querySelector('#span_title').innerHtml = event;
       };
       worker.onerror(function(event) {
          console.log(event);
        });
   }else{
      alert('不支持 Web Worker');
   }
   window.onbeforeunload = function()
   {
      window.worker.terminate();
   }
</script>

2.当然,同一个页面也能实现主线程与子线程通信

重点:<script id="worker" type="app/worker"></script>

<!DOCTYPE html>
<body>
  <script id="worker" type="app/worker">
    addEventListener('message', function() {
      postMessage('Work done!');
    }, false);
   </script>

  <script type="text/javascript">
    (function() {
      var blob = new Blob([document.querySelector('#worker').textContent]);
      var url = window.URL.createObjectURL(blob);
      var worker = new Worker(url);

      worker.addEventListener('message', function(e) {
        console.log(e.data);
      }, false);

      worker.postMessage('');
    })();
  </script>
  </body>
  </html>


3.再来看看ShareWorker

ShareWorker表示创建一个线程,能被其他同源同域的窗口,iframe都能访问,这也就是类似Java中的多线程中的资源共享,当然这里应该不会出现同步问题。

<!DOCTYPE HTML>
<title>Shared workers: demo 1</title>
<pre id="log">Log:</pre>
<script>
  var worker = new SharedWorker('workers.js',"com.my.share.webwoker"); //提供第二个参数,参数一致才能被共享
  var log = document.getElementById('log');
  worker.port.onmessage = function(e) { // note: not worker.onmessage!
    log.textContent += '\n' + e.data;
  }
</script>


当然,还有ServiceWorker,这里就不介绍了

http://javascript.ruanyifeng.com/htmlapi/webworker.html#toc7


----------------------------------------------------------------------------------------------------------------------

三.文件上传

android使用webview上传文件(支持相册和拍照)

----------------------------------------------------------------------------------------------------------------------



转载于:https://my.oschina.net/ososchina/blog/634952

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值