为什么一些Titanium / Android代码需要像setTimeout这样的hack才能正常运行?

时间:2014-05-14 17:38:58

标签: android titanium settimeout

我注意到有时候我必须将我的Titanium / Android javascript代码放入setTimeout调用中,以便代码被执行。 我不明白为什么有些代码行有时被完全忽略,当我添加一个500ms的setTimeout时,它们就被执行了。
我从互联网上收集了一些例子:

// alloy_fugitive App:alloy_fugitive

//on android, give a bit of a delay before closing the window...
    if (Ti.Platform.osname == 'android') {
        setTimeout(function() {
            $.detailWindow.close();
        }, 2000);
    } else {
        $.detailWindow.close();
    }

// cloudpush代码:tidev.io

CloudPush.enabled = !CloudPush.enabled;
// NOTE: Push.enabled takes a moment to update after you change its value.
setTimeout(syncButtons, 500);

//我的代码派生自Codestrong App:

function startRefresh() {
    $.home.add($.loading.getView());
    $.loading.start();
    loadContent();
    $.loading.stop();
    //dont know why android needs time...
    setTimeout(function (){$.home.remove($.loading.getView());}, 500);
}

真正令我烦恼的是,我从来不知道代码何时会在没有警告的情况下失败,这导致我无休止的调试会话。

我在这里遗漏了什么吗? 记录这些警告和陷阱的任何地方? 钛是如此的错误?

1 个答案:

答案 0 :(得分:0)

Titanium基于JavaScript语言,需要编写异步代码。

在你的一个例子中写道:

$.loading.start();
loadContent();
$.loading.stop();

在致电loadContent()之前,您无法确定$.loading.stop()中调用的所有操作是否已完成。如果要调用任何异步函数,则必须使用将在操作完成时执行的代码提供回调。