关于ActionScript在Java调用上的一些原理

在公司遇到了ActionScript调用Java的需求,所以大概了解了一下:

一般基本是分成了三块,本身flash的项目,ActionScript的库,Java的库

 

通信方式一般有两种: 

一.ActionScript直接通过Call方法来调用Native的代码:

1.(1).如上图,ActionScript的库作为项目与Java之间的桥梁

对于ActionScript库,ExtensionContext是它的核心类,一直都是由它来负责与java层之间的调用

然后通过ExtensionContext的实例instance的call()方法来调用Java中的方法:

(注意,下面的call里面的login可以认为是java层里面的重写FREContext类getFunctions()中对应的键)

 

(2).对于被调用的Java库:

它的入口是FREExtension,需要重写createContext()方法来获取本地代码上下文,也就是自己拓展的FREContext子类

FREFunction则是Java本地方法的具体实现,实例化之后可以以键值对的方法存入FREContext的getFunctions()中去,

call()方法就是通过传入对应键值来调起本地方法。

 

2.对于Java端有返回的方法,可以直接在AS端拿到返回值,再重新用FREObject包装一下:

在AS的library端:

 

二.Native代码直接向ActionScript代码抛出事件:(其实主要是分为派发事件,侦听事件和处理事件三个部分)

1.派发事件:

 

2.在ActionScript处侦听事件以及处理事件:

 1 import flash.events.Event;
 2     import flash.events.EventDispatcher;
 3     import flash.events.StatusEvent;
 4     import flash.external.ExtensionContext;
 5     
 6     public class WenverPay extends EventDispatcher
 7     {
 8         private static var content:ExtensionContext;
 9         
10         public static const KEY_UPDATECOMPLETE_CODE:String = "UpdateConfigParamsComplete";
11         
12         private static function init():void
13         {
14             content = Context.getInstance();
15         }
16         
17         private function onStatus(event:StatusEvent):void
18         {
19             switch(event.code)
20             {
21                 case KEY_UPDATECOMPLETE_CODE:
22                 {
23                     var e:Event = new Event(KEY_UPDATECOMPLETE_CODE);
24                     dispatchEvent(e);
25                     
26                     break;
27                 }    
28                 default:
29                 {
30                     break;
31                 }
32             }
33         }
34         
35         public function setUpdateSuccess(updateComplete:Function):void
36         {
37             init();
38             content.addEventListener(StatusEvent.STATUS, onStatus);
39         }
40         
41     }

 

posted @ 2016-02-05 14:39  TwoFish  阅读(1180)  评论(0编辑  收藏  举报