멀티 스레드로 윈도우 열기

웹브라우저에서 동작하는 자바스크립트는 싱글 스레드로 동작한다. 
즉,  어떤 코드를 실행하던간에 순차적으로 실행되고, 이 순서에 따라 의존성도 생긴다.

하지만 타이타늄 모바일의 경우 두가지 방법으로 윈도우를 열수있다.

1. 싱글 스레드로 윈도우 열기 

[app.js]

var parentWin = Ti.UI.createWindow();
var button = Ti.UI.createButton();
button.addEventListener(“click”, function(e){
var childWin = Ti.UI.createWindow();
childWin.open();
});
parentWin.add(button);
parentWin.open();

위와 같이 같은 파일 안에서 윈도우를 정의할 경우 같은 스레드에서 윈도우가 열린다.

2. 멀티 스레드로 윈도우 열기 

멀티 스레드로 윈도우를 열려면, 다음과 같이 윈도우 생성시 URL 속성을 지정한다.

[app.js]

var parentWin = Ti.UI.createWindow();
var button = Ti.UI.createButton();
button.addEventListener(“click”, function(e){
var childWin = Ti.UI.createWindow({ url: “./childWindow.js” });
childWin.open();

Ti.App.fireEvent(“fooEvent”, {data:”message”});
});
parentWin.add(button);
parentWin.open();

[childWindow.js]

var win = Ti.UI.currentWindow;

Ti.App.addEventListener(“fooEvent”, function(e){
Ti.API.info(e.data + ” got it!”);
});

위와 같이 url로 지정하면 childWindow.js 파일 안에 정의된 내용은 다른 스레드로 동작한다.
따라서, 두 윈도우 사이에 데이터를 전송하려면 약간의 시차가 생길수 있다.

예를 들어, 자식 윈도우를 열고
1. childWindow.open()

바로 윈도우로 메시지를 날리면,
2.  Ti.App.fireEvent(“fooEvent”, {data:”message”});

자식 윈도우에서 메시지를 받아야하는데 받지 못한다.
3.  Ti.App.addEventListener(“fooEvent”, function(e){  Ti.API.info(e.data + ” got it!”);  });

따라서 URL을 이용해 윈도우를 열 경우엔, 스레드 생성시간만큼의 약간의 딜레이를 주어야한다.

var childWin = Ti.UI.createWindow({ url: “./childWindow.js” });

childWin.open();
setTimeout(function(){

      Ti.App.fireEvent(“fooEvent”, {data:”message”});

   }, 100); 

});

불꽃남자

UI 개발자

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.