鲜为人知的Titanium之单例
2016-03-25 15:20
447 查看
Titanium能够用JS的方式来实现APP的编码,这确实是够强大,但是,在module与app之间的交互,即通过调用与回调的方式之中,不同的方法能够让module的身份变得不同。
1、##一般模式 ##
该方法是从下面的链接中学到的,这也是我们一般的做法
http://www.titaniumtutorial.com/2013/10/android-module-development-part-2_9.html
在JS中,我们只要这样做就可以监听回调
2、##单例模式##
如果我们抛弃上面的那第一种方法,改为
这样,让module的身份变成单例,因为,在JS中,要这样来接收回调
module一旦定义了,就会一直存在,重新new一个的话,旧的module 也会一直存在,回调也会跟着接收,导致本来需要时一个回调,变成每new一个module的时候,回调也跟着增加了。所以,在JS中需要这样
这样做的好处是,代码能更加简洁,调用跟回调可以区分开。
以上。
1、##一般模式 ##
private KrollFunction successCallback = null; private KrollFunction errorCallback = null; // method to invoke success callback private void sendSuccessEvent(String filepath) { if (successCallback != null) { HashMap event = new HashMap(); event.put("filePath", filepath); event.put("fileName", outPutFileName); // Fire an event directly to the specified listener (callback) successCallback.call(getKrollObject(), event); } } // method to invoke error callback private void sendErrorEvent(String message) { if (errorCallback != null) { HashMap event = new HashMap(); event.put("message", message); // Fire an event directly to the specified listener (callback) errorCallback.call(getKrollObject(), event); } } // method to register callbacks, which all passed from javascript layer @Kroll.method public void registerCallbacks(HashMap args) { Object callback; // Save the callback functions, verifying that they are of the correct // type if (args.containsKey("success")) { callback = args.get("success"); if (callback instanceof KrollFunction) { successCallback = (KrollFunction) callback; } } if (args.containsKey("error")) { callback = args.get("error"); if (callback instanceof KrollFunction) { errorCallback = (KrollFunction) callback; } } } @Kroll.method public void startRecording(HashMap args) { // this method used to register success and error callbacks registerCallbacks(args); }
该方法是从下面的链接中学到的,这也是我们一般的做法
http://www.titaniumtutorial.com/2013/10/android-module-development-part-2_9.html
在JS中,我们只要这样做就可以监听回调
var module= require("titutorial.audiorecorder"); module.startRecording({ success: function (e) { alert("success => " + e.filePath); }, error: function (d) { alert("error => " + e.message); } });
2、##单例模式##
如果我们抛弃上面的那第一种方法,改为
HashMap map = new HashMap(); map.put("content", "内容"); fireEvent("Callback",map);
这样,让module的身份变成单例,因为,在JS中,要这样来接收回调
var module= require("titutorial.audiorecorder"); module.addEventListener('Callback',function(e){ var content = e.content; Titanium.API.info('这里接收回调 content = '+content); }
module一旦定义了,就会一直存在,重新new一个的话,旧的module 也会一直存在,回调也会跟着接收,导致本来需要时一个回调,变成每new一个module的时候,回调也跟着增加了。所以,在JS中需要这样
module.removeEventListener('Callback',function(e){ ....... }
这样做的好处是,代码能更加简洁,调用跟回调可以区分开。
以上。
相关文章推荐
- python3 Unicode 编码转换中文显示
- [修复] Firemonkey 使用 DrawPath 断线问题(Android & iOS 平台)
- Effective Java读书笔记1-考虑使用静态工厂代替构造器
- iOS数据存储--Core Data
- SpringMVC手动配置
- angularjs学习4--过滤器(一)
- PHP实现发送邮件的方法(基于简单邮件发送类)
- 关于自适应label — 自适应宽/高度
- 递归和迭代
- JVM的句柄
- 反射实体类
- css笔记——区分css3中的transform transition animation
- Cogs 1709. [SPOJ705]不同的子串 后缀数组
- 根据第三方库spire.pdf使用指定打印机打印pdf文件
- 例题3_2 WERTYU(UVa10082)
- POJ 1511 Invitation Cards dij
- JavaWeb项目开发案例精粹-第2章投票系统-003Dao层
- 递归和迭代
- Ubuntu下使用qt开发opencv的配置
- easyui-combobox下拉框修改源码 实现模糊搜索