钛:不同的执行上下文不是多线程的



我正在尝试使用钛执行上下文在主应用程序上下文和其他上下文之间生成并行代码执行。我正在使用带有 url 属性的 CreateWindow 引用"lib"文件夹中的.js文件。但是通过在iOS和Android设备上记录执行,似乎在应用程序主线程上执行了不同的上下文,这里没有并行性。

我的合金控制器中的新上下文触发器:

var win2 = Ti.UI.createWindow({
  title: 'New Window',
  url: 'thread.js',
  backgroundColor:'#fff'
});
win2.open();
Ti.API.log('after open');

我的线程.js内容:

Ti.API.log("this is the new context");
Ti.App.fireEvent("go" , {});
while(true)
{
    Ti.API.log('second context');
}

这个 while 循环显然会阻止主上下文(我的合金控制器)等待它退出。

关于如何在后台执行一些代码(主要是繁重的 sqlite db 访问)以使 UI 响应的任何建议?(网络工作者不是我的选择)。

您可以尝试使用setInterval()setTimeout()方法实现所需的行为。

setInterval()[source]:

function myFunc() {
    //your code
}
//set the interval
setInterval(myFunc,2000) //this will run the function for every 2 sec.

另一种建议的方法是在需要后台行为时触发自定义事件,因为它是在自己的线程中处理的。官方文档中也建议这样做。

AFAIK,钛是单线程的,因为JavaScript是单线程的。您可以使用本机模块并行执行,但您必须为每个平台自己编写代码。

另一种选择是使用网络工作者,但我认为这是一种黑客攻击。

最新更新