【问题标题】:Titanium & Alloy - temporary window closes entire app when killedTitanium & Alloy - 临时窗口在被杀死时关闭整个应用程序
【发布时间】:2016-11-04 09:23:41
【问题描述】:

我打开了 2 个窗口,一个主窗口;和一个“弹出”加载窗口,应该只显示片刻。

当我尝试时

loading.close();

加载屏幕,所有窗口立即关闭。没有错误代码或任何东西,应用程序直接关闭,因为屏幕上没有更多视图/窗口。 但我从未关闭主要的“索引”视图,所以我不明白它为什么会消失。 我的主要想法是使用一个

loading.hide();

为了隐藏加载屏幕并允许其余部分继续,但是当隐藏执行时,应用程序不会触发或响应任何事件,直到手动强制关闭。


更多代码:

index.js

var loading = Alloy.createController("loading").getView();

function updateMainMenu() {
    if (Ti.App.dataReady){  

        //Actually create the main menù, only if data is available.
        //Cut out of snippet due to sheer length.
        //When menù is complete, close the loading window.

        loading.close();  //##### THIS CLOSES ENTIRE APP #####
    }            
}

//##### IF LOADING IS HIDDEN INSTEAD, EVENTS NEVER TRIGGER #####
//When a list element is clicked open the corresponding page.  
function onListClick(e) {
    var win = Alloy.createController('controlPage', e.row.data).getView();
    win.open();
}

//Loads the View, displays it and keeps it updated.
$.index.open(); 
loading.open();
setInterval(updateMainMenu, 2000); 

loading.js/tss/xml 没有针对这个问题的相关代码,或者至少我是这么认为的。它只有一个窗口和一个每半秒改变一次图像的 imageView,并且在关闭之前它可以正常工作。

注意事项:

  • 全局变量 Ti.App.dataReady 来自后台任务(另一个文件,工作正常);
  • 事件 onListClick 已正确绑定并且可以正常工作(如果我一开始没有打开加载)

【问题讨论】:

  • 您是否尝试创建加载指示器叠加层?在这种情况下,可能值得查看github.com/FokkeZB/nl.fokkezb.loading(并可能根据您的用例对其进行修改(即每半秒显示一次图像)
  • 谢谢,最终结果有点像我想要的。尽管如此,这不是一个答案^^我想知道为什么关闭窗口会关闭应用程序(或冻结它)。现在,我将使用小部件。再次感谢!

标签: javascript titanium appcelerator titanium-alloy


【解决方案1】:

首先,尽量不要使用 index.open,因为它指的是“文件”而不是实际的窗口。确保在窗口的 tss 文件中使用 id 并使用该 .open(),希望查看完整的索引控制器以提供更准确的答案。

然后你同时打开两个窗口。尝试像这样连续打开两个窗口可能会给你一个竞争条件。如前所述,请确保在打开任何覆盖窗口之前打开您的第一个窗口。

一个很好的建议,因为您在这里制作跨平台应用程序是为了确保事情(所有平台,iOS,Android 和 Windows 的窗口都不同)。对于 Android,第一个窗口很关键,将是根窗口。如果您的覆盖窗口首先完成(是的,有些事情是异步的),那么您的覆盖是根目录,关闭它将根据 Android 文档关闭您的应用。

所以,在打开任何其他窗口之前,请务必确保您的第一个窗口已“完成”。监听打开事件,然后打开叠加层。

现在,如果您希望它看起来不错,您可能希望在 XML 文件中指定具有两个视图的主窗口。从列表窗口上的“隐藏”和叠加层上的“显示”开始。这样你就可以随时换班。然后,您可以根据需要重复使用覆盖“进度”窗口。

在我的应用程序中,我在小部件中使用视图,因此我不必使用显示/隐藏,这样我也可以重复使用它。我想这是一个风味问题(除非我们开始谈论内存占用)

希望这对你有意义...

【讨论】:

  • 是的,我明白了。加载窗口比主“索引”页面轻得多,因为加载是异步的。加载将首先加载并获得 root。关闭根将关闭整个应用程序,这就是 .close 给我带来问题的原因。谢谢^^我在对我的问题的评论中找到了另一个解决方案(现在我正在使用它)但你仍然给我带来了解释。它肯定会被证明是有用的。
【解决方案2】:

您可以尝试的一件事是在打开第二个窗口之前在主窗口上触发“打开”事件。当我不等待窗口打开时,我有类似的奇怪行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-18
    • 2022-11-09
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多