频道栏目
首页 > 资讯 > Android > 正文

Android多线程及主UI更新

16-12-08        来源:[db:作者]  
收藏   我要投稿
Android多线程及主UI更新,解决问了JS和android数据交互,JS代码不执行的问题。

  mHandler=new Handler();
  mHandler.post(new Runnable(){
  void run(){
  //执行代码...
  }
  });
  这个线程其实是在UI线程之内运行的,并没有新建线程。
  常见的新建线程的方法是:
  Thread thread = new Thread();
  thread.start();
  HandlerThread thread = new HandlerThread("string");

  thread.start();

//加载所有的数据 备注:在android 17版本之后必须通过 @JavascriptInterface 注解实现,
//否则会出现"Uncaught TypeError: Object [object Object] has no method 'userList'",
//source: file:///android_asset/user.html (31)
//这个方法是在网页中调用的onload="javascript:csdn.userList()"
@JavascriptInterface
public void userList() {
handler.post(new Runnable() {
@Override
public void run() {
try {
//获得List数据集合
List list = footmcservice.getPersonList();

//json格式数据转换
JSONArray jsonArray =new JSONArray();
for(FootMarkContent person :list)
{
JSONObject json =new JSONObject();
json.put("id", person.getId());
json.put("name", person.getName());
json.put("mobile",person.getMobile());

jsonArray.put(json);
}

// 把json数组转换成字符串
String jsonstr = jsonArray.toString();
Log.i("MainActivity", "返回给前端数据:"+jsonstr);

// 调用网页中的javascript中的show函数
wv_footcontent.loadUrl("javascript:show('" + jsonstr + "')");

Log.i("MainActivity", "前端拿到的数据:"+jsonstr);

} catch (JSONException e) {
e.printStackTrace();
}

}
});
}


// 打电话 备注:在android17版本之后必须通过 @JavascriptInterface 注解实现,否则会出现bug(详见异常)
//这个方法是在网页中调用的:"+ jsonobjs[y].name + "
@JavascriptInterface
public void call(final String phone) {
//处理的操作要在hanlder中处理
handler.post(new Runnable() {
@Override
public void run() {
//这里要实现打电话的操作,必须添加打电话的权限
startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phone)));
}
});

}

相关TAG标签
上一篇:TextView setText html字体大小属性无效原因及解决方法
下一篇:jQueryselect全国城市三级联动省市区(项目中修改页面用到了)
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站