相关疑难解决方法(0)

从Android应用安装程序和主屏幕启动应用程序时的活动堆栈排序问题

仅出于测试目的,我允许通过URL下载和安装我的应用APK.下载到手机上后,可以使用Android应用安装程序启动它,用户可以选择将其安装到自己的设备上然后再运行.

考虑我们是否以上述方式下载并运行应用程序.我的应用中的主/启动器活动是登录页面(Activity A).一旦用户被认证,他们就被带到应用程序的主要区域,例如Activity B.所以现在这个任务的当前活动堆栈是A > B.

然后我按下手机上的主页按钮,然后进入Android主屏幕.我通过菜单中的图标重新启动我的应用程序,我被带到了Activity A,而不是Activity B.活动堆栈现在是A > B > A,或者现在有两个单独的任务与活动堆栈A > B,A分别.我想要的是Activity B在我重新启动应用程序时被收回.在这种状态下按回来将带我回去Activity B.

如果我首先通过安装程序打开应用程序,而不是通过主屏幕/菜单打开应用程序,则只会发生这种不良行为.

我研究了各机制如何开展活动.当我们使用app安装程序时,我们会看到以下日志:

INFO/ActivityManager(XXXX): Starting activity: Intent { dat=file:///mnt/sdcard/download/[my app].apk cmp=com.android.packageinstaller/.InstallAppProgress (has extras) }
INFO/ActivityManager(XXXX): Starting activity: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=[my package]/[Activity A] }
Run Code Online (Sandbox Code Playgroud)

通过发射器/主屏幕:

INFO/ActivityManager(XXXX): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=[my package]/[Activity A] }
Run Code Online (Sandbox Code Playgroud)

当使用安装程序启动时,我们看到它正在使用标志0x10000000,但是当启动器启动时,我们看到它正在使用0x10200000.它也使用意图类别.

从 …

flags android task android-intent android-activity

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

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

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

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万
查看次数

当活动 onPause 时,根据意图接收恢复应用程序(活动)

这是我的场景:

  • 用户打开应用程序并使用它 => 该应用程序位于其屏幕之一
  • 用户使用 Home 键在后台移动应用程序
  • 用户开始浏览并浏览我的网站。通过网站,某些链接可以打开应用程序
  • 用户单击浏览器中的链接并启动应用程序,但即使活动处于 onPause,它也不会恢复,而是重新启动,因此当前会话正在丢失。

我的主要活动是使用意图过滤器数据,因此我添加了:

  <activity android:name=".HomeActivity"
            <intent-filter>
                <data android:scheme="myprop" />
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>
  </activity>
Run Code Online (Sandbox Code Playgroud)

因此,当用户在浏览器中单击自定义 URL 时,我的应用程序将被唤醒并启动 Activity。因此,正如我之前所说,如果 myHomeActivityonPause(意味着用户已经使用了它),是否可以简单地恢复它(当然还要解析 myprop 参数),同时保持当前用户进度?

android activity-lifecycle android-activity

5
推荐指数
1
解决办法
1657
查看次数

Android:首次启动器活动仅在首次按HOME时重新创建为新任务

我想阻止用户离开我的应用.我试图通过家庭启动器活动/应用程序实现这一点,我不明白android的行为.首次按HOME将始终在新任务中创建新活动,而不是将现有活动移动到前台.当第二次按HOME时,没有任何反应.见例子:

我有一个登录活动(A)和设置活动(B).B从A打开.A被设置为启动器(LAUNCHER,DEFAULT,HOME类别).

  1. A打开B.
    • 任务T1:A - > B.
  2. 另一个A被创建成一个新任务(为什么?):
    • T1:A - > B.
    • T2:A
  3. A打开B(任务T2)
    • T1:A - > B.
    • T2:A - > B.
  4. 没有任何反应,为什么

当A的launchModesingleTop,singleTaskstandard时,我得到相同的行为.使用singleInstance只有一个A,但B在T1中单独使用,我不希望这样.

为什么总会创建一个新任务?所有intents标志始终设置FLAG_ACTIVITY_NEW_TASK标志.为什么android会这样做?

这与此处此处发布的行为相同吗?我无法使用该解决方案,因为android创建了一个新任务,因此A将永远是根.(或者我如何检查这是第二个实例?)

我不能在这里发布使用singleInstance,因为我不希望B单独使用(如果A是可见的,它也是唯一的活动和任务(登录目的)).我试图通过ActivityManager删除所有其他任务,但是对于SDK> = 21,我的min是16.getAppTasks()

我甚至无法使用解决方案,因为我从未意识到FLAG_ACTIVITY_BROUGHT_TO_FRONT标志.始终存在FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标志.

我已经尝试了很多与launchMode,clearTaskOnLaunch,noHistory的组合......但没有成功 - 总是新任务.

不知道怎么解决这个问题?在棒棒糖上运行.谢谢.

android android-intent android-launcher android-homebutton android-task

5
推荐指数
0
解决办法
578
查看次数