Android J2V8在App+j2ee开发中的使用

J2V8是基于webkit中内核js v8引擎的java 开源项目,实现了java与javaScript的互相调用,弥补了2种语言各自的缺陷

下载地址

http://mvnrepository.com/search?q=com.eclipsesource.j2v8

http://eclipsesource.com/blogs/2015/02/25/announcing-j2v8-2-0/

优点

1.可实现方法动态生成,注册和调用,可以解决java 方法爆棚问题

2.降低了交互难度,避免了使用webView

3.可直接调用大多数javascript api,让类似解析JSON变得更容易,方便

4.j2v8提供了多种数据结构,并实现了新的缓存数据存储方式

5.实现了动态脚本执行,实现了多线程

6.Javascript更容易调用Android代码层,开发语言使用Javascript+原生UI更容易开发Native App

缺点
  1. 由于使用了v8引擎,apk会变得更大
  2. 不支持Java类方法注册,不太支持Javascript的原型连中的call,apply
  3. 释放过程过于繁琐,内存不是ARC自动释放
  4. 不支持按脚本路径加载脚本,需要通过IO流转为字符串才能将脚本加入
代码展示

好了,以上是J2V8的相关信息,下面欣赏一下这个开源项目的魅力

package org.twt.zipjar.test;

import java.util.ArrayList;
import java.util.List;

import com.eclipsesource.v8.V8;
import com.eclipsesource.v8.V8Array;
import com.eclipsesource.v8.V8Object;
import com.eclipsesource.v8.utils.V8Map;
import com.eclipsesource.v8.utils.V8ObjectUtils;
import com.eclipsesource.v8.utils.V8Runnable;
import com.eclipsesource.v8.utils.V8Thread;

public class J2V8TestCase {

	public static void main(String[] args) 
	{
	}

	   public void testMultiV8Threads() throws InterruptedException {
		    final V8 v8 = V8.createV8Runtime();
	        final List<Thread> threads = new ArrayList<Thread>();
	        final List<Object> mergeSortResults = new ArrayList<Object>();
	        for (int i = 0; i < 10; i++) {
	            V8Thread t = new V8Thread(new V8Runnable() {

					@Override
					public void run(V8 v8) {
						 synchronized (threads) {
		                    V8Array data = new V8Array(v8);
		                    int max = 100;
		                    for (int i = 0; i < max; i++) {
		                        data.push(max - i);
		                    }
		                    V8Array parameters = new V8Array(v8).push(data);
		                    mergeSortResults.add(V8ObjectUtils.toList(parameters));
		                    parameters.release();
		                    data.release();
						 }
					}
				});
	            threads.add(t);
	        }
	        for (Thread thread : threads) {
	            thread.start();
	        }
	        for (Thread thread : threads) {
	            thread.join();
	        }
	       
	    }

	private static void declareFunctions() {
		V8 v8 = V8.createV8Runtime();
		v8.executeVoidScript("function getPerson(first, last, age) {return {‘first‘:first, ‘last‘:last, ‘age‘:age};}");
		V8Array parameters = new V8Array(v8);
		parameters.push("John");
		parameters.push("Smith");
		parameters.push(7);
		V8Object result = v8.executeObjectFunction("getPerson", parameters);

		parameters.release();
		result.release();
	}

	private static void TestMap() {
		V8 runtime = V8.createV8Runtime();
		V8Map<String> v8Map = new V8Map<String>();
		V8Object v8Object = new V8Object(runtime);
		v8Map.put(v8Object, "foo");
		v8Object.release();
		runtime.registerResource(v8Map);

		runtime.release(true);
	}

	private static void jsFunctionCall() {
		V8 v8 = V8.createV8Runtime();

		V8Array param = new V8Array(v8);
		V8Array arrAList = new V8Array(v8).push(0).push("0");
		V8Array arrBList = new V8Array(v8).push(1).push("1");
		param.push(arrAList).push(arrBList);

		V8Array result = v8.executeArrayScript("var s = [];Array.prototype.push.apply(s,[1,2,3]);s");
		System.out.println(V8ObjectUtils.toList(result));

		arrAList.release();
		arrBList.release();
		param.release();

		result.release();
		v8.release();
	}

	private static void jsonObjectCall() 
	{
		  V8 v8 = V8.createV8Runtime();
		  V8Object v8Object = new V8Object(v8).add("foo", "bar")
				  			add("name", "zhangsan")
				  			.add("age", 20);
		  V8Object json = v8.getObject("JSON");
		 
		  V8Array params = new V8Array(v8).push(v8Object);
		  String result = (String) json.executeFunction("stringify", params);
		  
		  V8Array params2 = new V8Array(v8).push(result);
		  V8Object result2 = json.executeObjectFunction("parse", params2);
		  
		  System.out.println(result);  
		  System.out.println(result2.getString("name"));
		 
		  params.release();
		  params2.release();
		  result2.release();
		  json.release();
		  v8Object.release();
		  v8.release();
	}

	private static void dataCache() {
		V8 v8 = V8.createV8Runtime();
		v8.add("name", "zhangsan");
		System.out.println(v8.get("name"));
		v8.release();
	}

	private static void callJavaNativeMethod() 
	{
		V8 v8 = V8.createV8Runtime();
		v8.registerJavaMethod(new J2V8TestCase(), "print", "print",new Class[]{String.class});
		String s = "Hello World";
		v8.executeVoidScript("print(‘"+s+"‘)");
		v8.release();
	}

	private static void executeArrayScript()
	{
		V8 v8 = V8.createV8Runtime();
		V8Array result = v8.executeArrayScript("var buffer = new ArrayBuffer(256);\n"
		 + "var i32 = new Int32Array(buffer);\n"
		 + "i32[0] = 1;\n"
		 + "i32[1] = 3;\n"
		 + "i32[2] = i32[0] + i32[1];\n"
		 + "i32;");
		int[] ints = result.getIntegers(0, 3);

		result.release();
		v8.release();
	}

	public void print(String s){
		System.out.println(s);
	}
}
时间: 2024-10-18 00:57:29

Android J2V8在App+j2ee开发中的使用的相关文章

在j2ee开发中影响性能的原因以及相关处理性的建议

java是现在比较流行的软件开发语言,同时也是互联网应用中安全性相对较高的一种开发语言了.被很多的电子金融系统开发企业以及电子商务网站建设企业所看重.虽然说在如今的互联网开发中,它比较有优势,然而用得不当的话,反而会使电子商务网站建设的性能受到影响.电子商务网站建设企业,就从多年的java商城开发中说说影响java商城系统和jsp商城效率的原因.    1.缺乏正确的容量规划    容量规划是一个全面的和发展的过程标准,预测当前和未来的IT环境容量需求.制定合理的容量规划不仅会确保和跟踪当前IT

Android之Http通信——5.开发中遇到的一些问题

Android之Http通信--5.开发中遇到的一些问题 标签(空格分隔): 未分类 本节引言: 好吧,好久没在这里更新blog了,不是小猪偷懒了,其实是在忙一些其他的事情,本来这节是应该讲解下结合Retrofit来封装Http请求的,不过,上周在使用基本的HttpClient和HttpURLConnection做项目的时候遇到了两个问题,纠结了几天,小猪还是觉得有必要mark一下,分别是Http请求的Cookie问题和像服务器发送PUT请求的问题,没错是"PUT"而不是GET或者PO

app端开发中,外部js是否需要下载到本地,到负载均衡

再一次app开发中,发现有引用的外部文件: 外部的文件不是应该下载到本地然后在引用这样不是更安全吗?(当时的心声)于是咨询了下经验丰富的同事: 引用外部的js文件时,优先使用非常快的CDN(Content Delivery Network 网络之上的内容分发网络,使客户端可以访问最近的边缘服务器,实现更快的加载,降低了网络阻塞,提高用户的访问响应速度). 假设,首次进入app index.html:index.js;css 等文件为1M ,需要加载的外部js等文件有6M.如果服务器的带宽很小,哪

手机APP游戏开发中常见的5个错误解析

一款手机游戏的成功,和其开发过程有着密切的关系,在任何一个开发过程中出现的错误,都会影响游戏以后的发展.那么我们在手机游戏的开发过程中常见的错误有哪些呢?我们又该如何避免这个情况的发生呢?一起来看看吧. 忽略目标群体 手机游戏开发首先就要确定所针对的目标群体,游戏主要是为谁而做?这些目标群体的关注点是什么?什么类型的游戏活动他们比较感兴趣?这些目标群体能投资多少在游戏的花费上?是否都每天都有娱乐游戏的时间.这就是开发游戏前期需要的市场调查,明确游戏人群,对于手机游戏后期的策划以及推广方向都有很大

匠心软件谈APP软件开发中架构优化的重要性

当下互联网的概念又被炒的如火如荼,但仔细分析之后会可以得出这样的一个结论:互联网不是万能的.然而互联网其实既不是高大上也不是高冷酷,它只是当下很多实体产品的一种新的销售表现而已.但是,当“互联网+”的概念被作为行动计划成为国家战略,也就同时意味着互联网行业的发展已经是关系到国家的经济命脉的重要一环. 除此之外,不管什么样的企业想要与“互联网+”联姻的话,那么管理者们首先需要考虑的就是技术如何的实现.而很多的企业在想方设法完成技术实现的时候,却往往忽略掉了“系统架构”这个核心元素. 之所以要从一开

C#学习(九)之Windows Store App &amp; WP 开发小记(一)

由于课程已经讲述完毕,所以本次学习记录就讨论记录一下我在Windows Store App & WP开发中遇到的一些问题与收获. 一.数据库(Sqlite)的使用 虽然资料很难找,但sqlite在这两个平台的使用还是很简单的. 首先是环境配置阶段: 1.工具->拓展与更新->联机,然后在右上搜索sqlite,之后下载安装下图两个打勾的拓展包,注意要重启VS方才生效. 2.项目->管理NuGet程序包->联机,搜索sqlite,安装下图打勾内容,如果项目多出下图两个文件即安装

Android平台BLE应用程序开发指南

从Android 4.3开始,BLE(Bluetooth Low Energy)在Android平台上被支持了.但是目前Android上BLE应用程序稀少,尤其是中文应用程序,希望本文对有兴趣开发BLE应用程序的开发者有所帮助.本文主要是对目前已有的Andriod BLE开发相关资料进行整理,给出一个开发资料的索引.(本文会根据大家的问题,不断完善) 基本参考资料 最基本的学习资料是这篇Android官方文档:<Bluetooth Low Energy>.该文档对BLE涉及的基本概念进行了介绍

通过蓝牙调试(穿戴设备app) - 开发文档翻译

由于本人英文能力实在有限,不足之初敬请谅解 本博客只要没有注明"转",那么均为原创,转贴请注明本博客链接链接 Debugging over Bluetooth 通过蓝牙调试 You can debug your wearable over Bluetooth by routing its debug output to the handheld device that's connected to your development machine. 你可以通过蓝牙debug你的穿戴设备

APP快速开发:PC、移动端多项目整合,learun让开发更畅快

以前我们针对快速开发框架的PC模式进行过详细的探讨,了解到一套合适的快速开发框架对一个企业的重要性,今天我们继续以learun框架为基础蓝本,探讨一下其在APP快速开发中的作用. learun技术支撑 (1)前台技术:ajax+Jquery+jqgrid+Bootstrap (2)开发环境:VS2012-VS2015 (3)数据库:SQL Server,Oracle.Mysql (4)后台技术:ASP.NET MVC,TinyIoc(IoC容器),EF(ORM框架),Log4Net,NPOI等