2

我们使用 Titanium Mobile 开发了一个应用程序。当我们第一次在 Android 设备上运行该应用程序时,它使用了大约 25MB 的内存。但是每次我们使用设备后退按钮退出应用程序然后重新启动应用程序时,内存使用量就会增加 10MB。因此,如果我们退出并重新启动应用程序 5 次,应用程序最终会使用 50MB 的额外内存,总使用量为 75MB。如果我们多次启动应用程序,应用程序将根本无法启动,并引发以下错误:

未捕获的错误:无法加载资源,引发 Java 异常。来源 = assets.readAsset(assetPath);

我们最初认为这是我们的应用程序的问题,所以我们开发了一个简单的应用程序来测试这个问题。这个测试应用程序只是创建一个窗口并为其添加一个标签。app.js 如下:

function createView() {

    var win1 = Titanium.UI.createWindow({  
        title:'Tab 1',
        backgroundColor:'#fff',
        exitOnClose: true
    });

    var label1 = Titanium.UI.createLabel({
        color:'#999',
        text:'I am Window 1',
        font:{fontSize:20,fontFamily:'Helvetica Neue'},
        textAlign:'center',
        width:'auto'
    });

    win1.add(label1);

    win1.open();    
}

createView();

好吧,测试应用程序与我们的原始应用程序存在相同的问题。首次启动时会消耗 14MB 内存。5 次重新启动(使用设备后退按钮)后,它消耗 21MB(初始内存的 150%)。

我们还尝试了在 Titanium 中创建项目时生成的示例应用程序和 Titanium 开发的 Kitchen Sink 应用程序。结果是一样的。

我们的测试是使用 Titanium 3.0.0.GA 和两种不同的设备完成的:

  • HTC Desire Z - 安卓 2.3
  • 三星盖乐世 2 - 安卓 4.0

我们一直在寻找解决此问题的方法,但没有任何结果。我们不想相信这是 Titanium 的正常行为,因为如果是这样,Titanium 根本不是我们的选择。有没有人为这个问题找到任何解决方案/解决方法?

提前致谢

更新:添加了测试应用程序的 tiapp.xml

<?xml version="1.0" encoding="UTF-8"?>
<ti:app xmlns:ti="http://ti.appcelerator.org">
    <id>com.cloudship.titanium.mobile.test</id>
    <name>titanium-mobile-test</name>
    <version>1.0</version>
    <publisher>Javier</publisher>
    <url>http://</url>
    <description>not specified</description>
    <copyright>2013 by Javier</copyright>
    <icon>appicon.png</icon>
    <persistent-wifi>false</persistent-wifi>
    <prerendered-icon>false</prerendered-icon>
    <statusbar-style>default</statusbar-style>
    <statusbar-hidden>false</statusbar-hidden>
    <fullscreen>false</fullscreen>
    <navbar-hidden>true</navbar-hidden>
    <analytics>true</analytics>
    <guid>18e506f3-02d4-4fb7-84b7-ff8d4c1fac82</guid>
    <property name="ti.ui.defaultunit" type="string">system</property>
    <iphone>
        <orientations device="iphone">
            <orientation>Ti.UI.PORTRAIT</orientation>
        </orientations>
        <orientations device="ipad">
            <orientation>Ti.UI.PORTRAIT</orientation>
            <orientation>Ti.UI.UPSIDE_PORTRAIT</orientation>
            <orientation>Ti.UI.LANDSCAPE_LEFT</orientation>
            <orientation>Ti.UI.LANDSCAPE_RIGHT</orientation>
        </orientations>
    </iphone>
        <android xmlns:android="http://schemas.android.com/apk/res/android">
        <manifest>
            <application android:debuggable="true"/>
            <supports-screens android:anyDensity="true"/>
        </manifest>
    </android>
    <mobileweb>
        <precache/>
        <splash>
            <enabled>true</enabled>
            <inline-css-images>true</inline-css-images>
        </splash>
        <theme>default</theme>
    </mobileweb>
    <modules/>
    <deployment-targets>
        <target device="iphone">false</target>
        <target device="ipad">false</target>
        <target device="blackberry">false</target>
        <target device="android">true</target>
        <target device="mobileweb">false</target>
    </deployment-targets>
    <sdk-version>3.0.0.GA</sdk-version>
</ti:app>
4

3 回答 3

1

这是 Titanium 3.0.0.GA 中的一个错误。在此处查看 jira 票。幸运的是,它已在 3.0.2 中修复。

答案在Titanium Q&A中给出

于 2013-02-22T16:16:53.997 回答
0

我也在开发钛。我检查了我的应用程序,我在 HTC Desire 上的 Android 2.2.2 上没有遇到这个问题。该应用程序已正确关闭。

您可以使用以下代码进行测试:

var win1 = Titanium.UI.createWindow({  
    title:'Tab 1',
    backgroundColor:'#fff',
    exitOnClose: true
});

var label1 = Titanium.UI.createLabel({
    color:'#999',
    text:'I am Window 1',
    font:{fontSize:20,fontFamily:'Helvetica Neue'},
    textAlign:'center',
    width:'auto'
});

win1.add(label1);

win1.open(); 

所以去掉周围的功能。

于 2013-02-22T12:19:50.007 回答
0

这是内存问题的解决方案..请通过这个线程

https://developer.appcelerator.com/question/116867/this-is-a-solution-to-your-memory-woes

于 2013-02-22T15:49:53.783 回答