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

时间:2015-01-29 10:37:34

标签: multithreading titanium context-switch

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

我在Alloy控制器中的新上下文触发器:

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

win2.open();
Ti.API.log('after open');

我的thread.js内容:

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

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

有关如何在后台执行某些代码(主要是重型sqlite数据库访问)以便UI响应的任何建议? (网络工作者不是我的选择)。

2 个答案:

答案 0 :(得分:0)

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

的setInterval()[source]

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

另一个建议的方法是在需要后台行为时触发自定义事件,因为它是在自己的线程中处理的。这也在official documentation中提出。

答案 1 :(得分:0)

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

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