鲜为人知的Titanium之单例

Titanium能够用JS的方式来实现APP的编码,这确实是够强大,但是,在module与app之间的交互,即通过调用与回调的方式之中,不同的方法能够让module的身份变得不同。
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){
    .......
}

这样做的好处是,代码能更加简洁,调用跟回调可以区分开。
以上。

本项目属于机器学习的简单部分,基于为了快速理解机器学习而搭建的人工智能速成项目,大家可以根据其中的项目时间进行相关的学习.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值