相关疑难解决方法(0)

应用程序始终从根活动开始,而不是恢复背景状态(已知错误)

我正面临这些链接中提到的问题:

http://code.google.com/p/android/issues/detail?id=2373

http://groups.google.com/group/android-developers/browse_thread/thread/77aedf6c7daea2ae/da073056831fd8f3?#da073056831fd8f3

http://groups.google.com/group/android-developers/browse_thread/thread/2d88391190be3303?tvc=2

我有一个简单的根活动与LAUNCHER和MAIN意图,没有别的.我开始另一个活动,在清单中没有任何标志或任何额外东西.

我启动应用程序(root活动),然后从那里开始第二个活动.按Home(主页)按钮后,任务将进入后台.在再次启动应用程序时(从Launcher或按住最近应用程序的Home按钮),它会在现有堆栈的顶部启动根活动的新实例.

如果我按下后退按钮,新的"root"活动将关闭,旧的第二个活动将可见,这意味着它将在同一任务中启动根活动,而不是将任务带到前台.

为了解决这个问题,我做了root活动的启动模式singleTask.现在,当我按下主页并再次启动应用程序时,它会清除旧的根任务上方的活动,并将旧的根任务带到前台,而不是仅将第二个活动的整个旧任务放在最前面.请注意,旧的根任务仍保留其应用程序状态,这意味着它不是新实例,但已杀死较高的活动.

它甚至发生在从市场上下载的其他应用程序中.手动安装方法对我没有影响,它仍然以相同的方式启动.

resume android task android-activity

48
推荐指数
3
解决办法
3万
查看次数

重新启动Home on Home按钮,但是......仅在第一次

我正在开发的应用程序在第一次安装时有一种奇怪的行为.如果用户第一次正常退出应用程序,它将永远按预期运行.如果用户在安装应用程序后第一次使用主页按钮,它会将应用程序视为应该再次重新启动主屏幕并在旧版本之前启动新版本的活动.

所以手头有两个问题.我似乎无法解决这两个问题.

  1. 在用户点击主页按钮时首次安装应用程序时,请保持应用程序关闭.
  2. 保持应用程序的多个版本在执行此操作时启动(launchMode有点帮助,但第一个组件仍然触发).

我没有launchMode将清单文件中的属性定义为任何内容.因此,不应该有任何奇怪的行为.我现在已经尝试launchmode了应用程序的属性,看看我是否能够按照预期的方式运行它,但是这里似乎还有更多的东西,而不仅仅是正确地启动活动.当我按下主页按钮时,应用程序应该第一次关闭自己是没有理由的.

我也没有onUserLeaveHint 在应用程序中使用.通过对项目进行搜索,我必须再次确定.所以似乎根本没有尝试覆盖主页按钮.

即使重新启动手机,主页按钮也会再次正常运行.不确定是什么原因导致初始安装将主页按钮视为从头开始启动应用程序的标志.

一旦用户第一次退出应用程序,问题就会永久解决.关于我应该在哪里看的任何想法?

最近在应用程序中进行了一次搜索,以查看是否它只是因为onUpgrade()SQLite数据库方法的一个组件导致一些奇怪的行为而触发.

@Override
public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) {
                if (newVersion > oldVersion) {

           }
       }
Run Code Online (Sandbox Code Playgroud)

或者在另一个可能触发清单文件更新的位置,如果我将新版本的APK传递给其上有版本的设备已经低于当前版本.但是,在这部分代码中没有任何内容让我相信它应该影响与启动序列相关的任何事情.

清单文件(名称已更改)在下面提供,用于应用程序当前使用的内容.

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

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="com.android.vending.CHECK_LICENSE"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

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

<application android:icon="@drawable/icon"
             android:label="@string/app_name"
             android:allowBackup="false"
             android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
             >
    <activity android:name=".MyMain"
              android:label="@string/app_name_with_version"
              android:screenOrientation="portrait"
              android:windowSoftInputMode="adjustPan"   />
    <activity android:name=".StartupActivity"
              android:label="@string/app_name"
              android:screenOrientation="portrait" …
Run Code Online (Sandbox Code Playgroud)

android

43
推荐指数
2
解决办法
1万
查看次数

按HOME后重新启动应用程序时如何返回最新启动的活动?

熟悉的场景:我有一个Main活动,在按下按钮时启动游戏活动.如果用户按下HOME,然后再次启动我的应用程序,则应该显示Game活动,这是他在使用应用程序时最后所做的事情.

但是,相反的是他再次获得Main活动.我觉得Android正在创建另一个 MainActivity实例并将其添加到该应用程序的堆栈中,而不是仅仅选择顶部的任何内容,因为如果我在重新启动应用程序后按BACK,我会进入游戏活动!并且每次调用Main.onCreate方法,而不是调用GameActivity.onResume.

AndroidManifest.xml几乎是'骨头':

<activity android:name="MainActivity" 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="GameActivity" android:label="@string/app_name">
</activity>
Run Code Online (Sandbox Code Playgroud)

如你所见,没有什么太花哨的.

这就是新活动的推出方式,也非常简单:

Intent intent = new Intent(this, GameActivity.class);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

从理论上说,这应该在Android中起到"开箱即用"的作用,因为一个非常相似的问题的答案是:在Android中维护标准应用程序活动后备堆栈状态(使用singleTask启动模式),但事实并非如此.

我一直在阅读和重读有关活动和任务和堆栈的文档,并在SO中浏览所有相关的答案,但我不明白为什么这么简单的设置不能按预期工作.

stack android task android-activity

23
推荐指数
2
解决办法
3万
查看次数

从其他应用程序启动时,应用程序失去了记住其堆栈的能力

现在我已经研究了这个,我正在改写它以使它更清楚.如果您正在寻找更多信息,可以使用旧编辑中的一些信息.

怎么了:

(这是指未设置任何launchMode设置的应用程序,因此使用默认设置)

  1. 您从市场或安装程序启动应用程序.这将使用FLAG_ACTIVITY_NEW_TASK标志启动应用程序的根/主活动,而不是类别.现在应用程序堆栈是[A]

  2. 然后,您将继续执行应用程序中的下一个活动.现在这个任务的堆栈是[A> B]

  3. 然后按主页键,然后按主屏幕或应用程序托盘中的图标重新启动相同的应用程序.

  4. 在这一点上预期的是活动B将显示,因为那是你离开的地方.但是显示A并且任务堆栈是[A> B> A]使用以下标志启动A的第二个实例:FLAG_ACTIVITY_NEW_TASK,FLAG_ACTIVITY_RESET_IF_NEEDED和FLAG_ACTIVITY_BROUGHT_TO_FRONT.它还有android.intent.category.LAUNCHER类别.

此时,如果您按下后退键,它将返回B,就像您离开时一样.

看一下文档,似乎只应为使用singleTask或singleTop launchModes的活动设置FLAG_ACTIVITY_BROUGHT_TO_FRONT.但是,此应用程序尚未设置任何launchModes,因此使用默认的标准launchMode.

我认为在这种情况下不会发生这种情况?

我还应该注意,一旦它进入这个奇怪的状态,那么每次从主屏幕或应用程序托盘启动应用程序时都会发生这种情况.如果任务完成(重新启动手机,强制停止应用程序,或一直回到堆栈)将解决此问题,并将不再错误地启动它.只有从安装程序或市场启动应用程序然后尝试从启动程序启动它时才会发生这种情况.

总而言之,为什么会发生这种情况?有没有办法防止它?

stack android task android-activity

9
推荐指数
1
解决办法
1244
查看次数

如何让Android应用程序每次打开时都停止重启?

我开发了一个小的Android应用程序,最近发现了一个奇怪的行为

当我使用usb和eclipse安装此应用程序后导航到任意Activity时,我可以离开应用程序,转到android主屏幕或其他应用程序,然后通过再次"启动"应用程序直接返回到提到的任意Activity.

但是当我通过下载apk文件直接在手机上安装应用程序时,当我切换到另一个应用程序或android主屏幕后,当我返回此应用程序时,我将始终返回到应用程序的根Activity.

有谁知道这种行为来自何处或如何解决这个问题?

更新:我在两种情况下都在真实硬件上运行应用程序.

java android android-activity

4
推荐指数
2
解决办法
1700
查看次数

标签 统计

android ×5

android-activity ×4

task ×3

stack ×2

java ×1

resume ×1