Titanium Mobile Android:关闭应用程序时未释放内存
我们开发了一款使用Titanium Mobile的应用程序。当我们第一次在Android设备上运行应用时,它使用大约25MB的内存。但是,每次我们使用设备后退按钮退出应用程序,然后重新启动应用程序时,内存使用量将增加10MB。因此,如果我们退出并重新启动应用5次,该应用最终会使用50MB的额外内存,总共使用75MB。如果我们多做几次启动应用程序,该应用程序将根本无法启动,并出现以下错误被抛出:Titanium Mobile Android:关闭应用程序时未释放内存
Uncaught Error: Failed to load resource, Java exception was thrwon. Source = 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应用程序。结果是一样的。
我们的测试采用钛3.0.0.GA做有两个不同的设备:
- HTC Desire Z的 - 的Android 2.3
- 三星Galaxy 2 - 的Android 4.0
我们已搜查为解决这个问题没有结果。我们不想相信这是Titanium的正常行为,因为如果是这样,Titanium根本就不是我们的选择。有没有人找到解决此问题的解决方案?
在此先感谢
UPDATE:测试应用程序
<?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>
我也开发钛的添加tiapp.xml。我查看了我的应用程序,并未在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();
所以去除环境功能。
这是解决内存woes..please经过这个线程
https://developer.appcelerator.com/question/116867/this-is-a-solution-to-your-memory-woes
感谢您的回答。这个问题在没有封闭函数的情况下仍然存在(我们将其包含在内以保持全局上下文清洁) – 2013-02-22 12:22:39
我试图用你所描述的返回按钮关闭我的应用程序,但它并未从正在运行的应用程序列表中删除。你的应用程序是否一样? – 2013-02-22 13:08:54
在HTC中,它会在几秒钟后从进程列表中删除。在银河II中它保存在列表中。在这两种情况下,当我再次启动应用程序时,该过程消耗的内存越来越多。 – 2013-02-22 13:14:05