Phonegap Android应用程序重新启动而不是恢复,虽然它没有被操作系统杀死

时间:2012-04-12 11:15:46

标签: android cordova

我创建了一个Phonegap 1.5 / Android应用程序。

我的客户报告说,当他使用“主页”按钮离开应用程序,然后使用应用程序图标重新启动应用程序时,应用程序从一开始就重新启动而不是恢复。但是,当他按住主页按钮时,应用程序会显示在最近的应用程序中,当他通过此菜单访问应用程序时,应用程序会以预期的方式恢复。

我认为这可能与由于内存不足而被操作系统自动关闭的应用程序相关联,但如果是这种情况,则应用程序在最近的应用程序中点击时不应恢复。

我无法使用Android 2.3.4重现我的索尼爱立信XPERIA上的错误,客户端在摩托罗拉Defy和另一部手机上遇到过此行为(我将其他手机和操作系统版本的参考添加为我得到它们的时候。)

应用程序的初始化过程以这种方式声明:

window.addEventListener('load', function(){
      document.addEventListener('deviceready', _onDeviceReady, false);
}, false);

可以通过将进程附加到其他事件来解决这个问题(虽然我对此表示怀疑,但应用程序似乎从一开始就重新启动了)?

在Android Manifest中是否有声明可以阻止此行为?

以下是我的AndroidManifest.xml中的活动签名

    <application android:debuggable="true" android:icon="@drawable/appicon"
    android:label="@string/app_name" >
    <activity android:configChanges="orientation|keyboardHidden" android:name=".MyAppActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
 <activity android:name="com.phonegap.DroidGap" android:label="@string/app_name" 
           android:configChanges="orientation|keyboardHidden">
     <intent-filter>
     </intent-filter>
    </activity>
</application>

这是某些Android手机/版本中的已知错误吗?

修改:按住主屏幕按钮不会显示当前正在运行的应用,但会显示最近的应用。为什么该菜单中的行为与主图标不同?

5 个答案:

答案 0 :(得分:7)

您想将以下内容添加到AndroidManifest.xml中的activity标记:

android:launchMode="singleTask"

所以看起来应该是这样的:

<activity android:name="MyApp" android:label="@string/app_name"
    android:theme="@android:style/Theme.Black.NoTitleBar"
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
    android:launchMode="singleTask">

有关launchMode的更多信息,请查看此页面:http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode

答案 1 :(得分:3)

Hey Lucas你有:

android:configChanges="orientation|keyboardHidden"

在AndroidManifest.xml的活动代码中。

正如你所说,可能发生的另一件事是你的客户的手机内存不足,操作系统正在杀死你的应用以释放内存。

答案 2 :(得分:2)

这实际上是在Android中设计的,其中操作系统控制应用程序的生命周期。你可以find more information here

答案 3 :(得分:0)

试一试......

使用android:launchMode =&#34; singleInstance&#34;在清单文件的活动标签中。

答案 4 :(得分:-1)

我有三星Galaxy Note II,我遇到了同样的问题。所以,我修改了AndroidManifest.xml,现在它适用于三星和HTC Thunderbolt。

以下是修改:

<uses-feature android:name="android.hardware.camera" android:required="false"/>

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="10"/>

<activity  android:configChanges="orientation|keyboardHidden" />