应用程序完全重新启动时启动图标按下启动

我正在试图发布我的第一个Android应用程序发布到less数testing人员的过程。 但是,我遇到了一个问题。 当你退出应用程序,然后通过启动它的图标重新input它,它重新启动整个应用程序,而不是返回到它的以前的位置。 即使退出后重新进入,也会发生这种情况。 但是,如果我按住Homebutton并通过最近的应用程序列表启动它,则不会发生这种情况。

我在网上search有这个问题的人,有几个,但没有人有过坚实的答案,为什么发生在他们身上。 在旧的问题中,我们build议在清单文件中将launchmode设置为singletask或singleinstance,但是这对我没有帮助,而且从我所了解的情况来看,android的默认行为是返回到前一个任务的状态在这种情况下,所以我不知道为什么我需要特殊的清单选项来做到这一点。

关于这个问题最奇怪的是,如果我使用eclipse和debugging器将应用程序放在我的手机上,则不会发生此问题。 我甚至不需要连接到debugging器,似乎只要我有一个debugging版本的应用程序,问题不会发生。 但是如果我使用发布版本(我使用Eclipse中的Android工具 – 导出签名应用程序包菜单选项创build它),问题就会发生。 如果任何人有任何的洞察力是什么导致这一点,我很想听听你的想法。

我有一个应用程序的相同的问题,我解决了这个行为在您的AndroidManifest.xml文件的<activity>声明中添加标志"android:launchMode="singleTop""而不是"android:launchMode="singleTask"" 。 希望这将有助于某人。

到目前为止,我已经发现,这是一个基于你如何在你的真实设备上安装它的问题,特别是:

  1. 如果您只需将APK复制并粘贴到设备的本地存储并从设备安装,无论它是签名还是未签名,或从bin文件夹中取出,都会显示此行为,应用程序将从菜单图标重新启动。

如果使用以下某个选项安装它,则不会显示此问题:

  1. 转到sdk / tools /使用terminal或命令提示符,然后键入

     adb install <FILE PATH OF .APK FILE> 

    在Linux中,键入:

     ./adb install <FILE PATH OF .APK FILE> 
  2. 只需从Eclipse运行你的项目。

我很高兴知道是否有任何可能的方式分发正确的APK进行betatesting。 我已经尝试导出已签名的APK,因为当您复制并粘贴APK并手动安装时,会显示stream氓行为。

更新:

我find了一个解决scheme。 遵循以下两个步骤:

  1. activity标签的AndroidMainifest.xml文件中为你的应用的所有活动设置android:launchMode="singleTask" = true
  2. 把这个代码放到你的Launcher Activity的onCreate()

     if (!isTaskRoot()) { final Intent intent = getIntent(); final String intentAction = intent.getAction(); if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) { finish(); return; } } 

这种行为是Android中的一个错误。 不是特例。

这是Android中的默认行为。 对于debugging版本,出于某种原因它的工作原理是不同的。 它可以通过在activity中添加android:launchMode="singleInstance"来解决,你想从图标启动后重新启动。

您可以将launchMode作为singleTop用于AndroidManifest.xml中的Launcher Activity

  <activity android:name="<YOUR_ACTIVITY>" android:label="@string/app_name" android:launchMode="singleTop"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

尝试使用android:alwaysRetainTaskState ,如以下示例所示:

 <activity android:name="com.jsnider.timelineplanner.MainActivity" android:alwaysRetainTaskState="true" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

在Android中按下后退button时,会调用onDestroy方法(而不是按Homebutton,其中只有onPause()方法被调用)。

如果您需要应用程序继续停止,请在onDestroy()方法中保存应用程序的状态,并在onCreate()方法中加载该状态。

添加到您的第一个活动:

 if (!isTaskRoot()) { finish(); return; } super.onCreate(savedInstanceState); 

上述所有解决scheme都不能在我的所有设备上始终如一地运行。 它在一些三星,但不是全部。

问题的原因是手动安装APK。

对我来说,修复是添加LaunchMode = LaunchMode.SingleTop到主活动的Activity属性:

 /// <summary> /// The main activity of the application. /// </summary> [Activity(Label = "SilhuettePhone", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation, ScreenOrientation = ScreenOrientation.Portrait, LaunchMode = LaunchMode.SingleTop, WindowSoftInputMode = SoftInput.AdjustResize)] 

您可以尝试在AndroidManifest.xml中为您的启动程序活动设置android:alwaysRetainTaskState="true"

  <activity android:name=".YourMainActivity" android:alwaysRetainTaskState="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

有关详情,请参阅https://developer.android.com/guide/topics/manifest/activity-element.html#always