问题标签 [launchmode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
980 浏览

android - 即使在堆栈顶部,有时也会创建 singleTop Activity

我有一个 Activity,其 launchMode 是 singleTop (在清单中)。我的理解是,如果 Activity 是 singleTop 并且它位于 Activity 堆栈的顶部,那么使用新 Intent 启动 Activity 实际上会导致在 Activity 上调用 onNewIntent() ,而不会创建新的 Activity 实例(因此,不调用 onCreate() )。

此 Activity 运行一个显示持续通知的前台服务。选中后,此通知只会将用户带回到堆栈顶部的 Activity(没有从该 singleTop 活动启动的活动)。My problem is that when the notification is selected, sometimes a new instance of the Activity is created – even when it is visibly already on top of the stack. 这对我的 Activity 来说是有问题的,因为它的行为对于它在后台被杀死并重新启动的情况是不同的(与刚刚使用 onNewIntent() 放在前面的情况相比)。我的服务用于呈现通知的代码如下:

我说这种行为有时会发生,当它发生时,它会反复发生。例如:

  1. MyProblematicActivity 首次启动
  2. 服务启动并显示通知
  3. 选择通知。
  4. 再次创建 MyProblematicActivity(服务已启动,通知已显示)。
  5. 重复 2-4 次。

有时,在 #3 之后,调用 MyProblematicActivity 的 onNewIntent() 而不创建新实例,并且事情按预期工作。

我不知道为什么会发生这种情况。任务根部的状态活动是否会对我的 singleTop 活动的行为方式产生任何影响?FWIW,创建 MyProblematicActivity 的 Activity 是一个 singleTask Activity。

0 投票
1 回答
1025 浏览

android - Android:创建具有多个应用程序活动的单个任务(Lauchmode 问题)

我不知道如何解决这个Android问题。简而言之,我的 2 个应用程序之间的流程如下:

流动

  1. 将应用程序 A绑定到市场应用程序(AIDL)中的服务
  2. 注册一个 BroadcastReceiver并调用一个返回 pendingIntent的服务方法。
  3. 启动 PendingIntent(包含 BillingActivity 实例)。
  4. 使用“ startActivityForResult() ”启动 PaymentActivity 。
  5. 做一些事情,终止(finish())。
  6. onActivitiyResult()方法中,发送一个广播并终止。
  7. 获取广播信息

我的 2 个应用程序之间的流程

问题 :

我想用以下组件创建一个任务:

  • Top1Activity(应用A)
  • BillingActivity(市场应用)
  • PaymentActivity(市场应用)

Android 的前台和后台任务

我试图改变BillingActivity + PaymentActivity "launchMode" :

单实例

为他们俩创建了一个新任务。当按下返回按钮(或调用 finish() 方法)时,用户将按预期重定向到上一个活动。问题:不能在多个任务之间使用“StartActivityForResult”(onActivityResult 被立即调用)。

单任务

在 BillingActivity 中按下返回按钮(或调用 finish() 方法)时,用户被重定向到 Top2Activity(在后台任务中)。

我已经失去了超过 48 小时试图解决它。我会很感激你的帮助。如果需要,我可以发布代码。

谢谢

----------- 编辑 2015-02-02

按照大卫的建议,我删除了所有特殊的启动模式:

TOP2Activity(背景):

我的 Top1Activity(前景):

计费活动(前台):

付款活动:

AIDL 服务返回pendingIntent:

当从 BillingActivity(或 PaymentActivity)按下返回按钮时,我仍然被重定向到 Top2Activity ...

不知道 ?谢谢

0 投票
1 回答
1654 浏览

android - 使用 PendingIntent 时不尊重 singleTask 和 singleInstance?

我有一个将 launchMode 设置为 singleTask 的活动:

我有一个带有启动该活动的 PendingIntent 的持续通知:

当我与现有的 MyActivity 交互时,我点击 Home 并通过启动器重新启动 MyActivity,MyActivityonNewIntent()会按预期调用。

问题是当我与现有的 MyActivity 交互时,我点击正在进行的通知,一个新的 MyActivity 是通过 创建onCreate()的,而现有的 MyActivity 是通过销毁的onDestroy()。我希望 MyActivityonNewIntent()会被调用。为什么这不会发生?

我尝试了这些答案但没有成功:

0 投票
2 回答
2327 浏览

android - 可以通过清除顶部清除具有单个任务标志的活动吗?

假设我有一个具有 singleTask 启动模式的启动器活动 A。现在想象 A 像这样启动 Activity B;

在这种情况下,A 似乎没有被破坏。我想知道这是正确的还是我做错了什么?

0 投票
0 回答
88 浏览

android - Android中LaunchMode详解

我想学the concept and idea for using launchMode安卓。何时使用哪种模式以及每个模式的一些细节。

因为我在 Activity 之间的动画转换中遇到问题。当我从 Activity A 转到 B 时,Amimation 显示顺利,但是当我通过调用 finish() 返回到 Activity A 时,动画看起来不像从 B 到 A。我用谷歌搜索了它,一些答案说要添加singleInstance or singleTask to Activity in manifest。有人说要添加标志 Activity_reorder_to_front 和许多其他答案。现在我不想让任何人解决我的问题。我只是想学习这些概念来完成我自己的工作。

并建议我哪一个更适合我目前的情况。我必须调用完成,我不想创建一个新的活动 A 实例。

0 投票
1 回答
1333 浏览

android - 为什么 Android 会在 singleTask 或 singleInstance 上启动多个实例?

我想要达到的目标:

MainActivity 应该被重用,换句话说,我不想onCreate()再次运行,但只能onResume()在同一个 Activity 上,但我有一个奇怪的行为。似乎launchModeAndroidManifest 中的 被忽略了。无论我设置什么 ( singleTask, singleInstance),它总是会创建一个导致堆增长的新 Activity。当我使用主页按钮退出应用程序并重新启动它时,每次都会创建一个新实例。(在 .hprof 泄漏报告中观察到这一点)。

这是它的外观:

当我试图隔离问题时,我看到 Activity 将在按下 home 时被杀死(onDestroy()被执行),但泄漏报告显示了这一点。每次启动应用程序时,我都会获得越来越多的 MainActivity 实例,尽管最后一个实例被认为已被销毁。怎么可能onDestroy()被执行了,但是我启动 Activity 的实例有多少(直接通过应用启动):

泄漏报告

执行起来也很有趣onDestroy(),因为我从不打电话finish(),而且我还有很多资源。所以Android没有必要杀掉Activity,但是上层问题一开始更重要。也许是因为我finish()在 MainActivity 的 on 中杀死了所有片段onPause()。否则碎片会泄漏。片段的onDestroy()调用super.onDestroy()可能是 MainActivity。

0 投票
0 回答
144 浏览

android - 覆盖 HOME 按钮以模仿 BACK 按钮或更快地启动 Activity

我想覆盖 HOME 按钮,使其行为与 Android 中的 BACK 按钮完全相同。我在这个网站上看过类似的问题,但它们不起作用。

我目前正在构建一个锁屏,并在屏幕关闭时设法在安全密码上方打开一个活动。这样,一旦用户决定重新打开屏幕,活动就会打开。

这行得通,但我的BroadcastReceiver内部 aService非常慢。如果我足够快地单击电源按钮,则活动不会立即打开,并且用户能够在我的活动之前看到安全密码(这违背了我的应用程序的目的)。

当活动打开时单击后退按钮,然后快速关闭和打开我的屏幕,活动也会快速打开。但是,如果我单击 HOME 按钮,则该活动需要几秒钟才能再次启动。据我所知,这与每个按钮如何管理堆栈有关。

我已经尝试过使用singleTask等,以便活动不会重新启动,而只是移动到前面。这也不起作用。我剩下要做的就是模仿后退按钮的行为,但这可能吗?

我的接收器和服务是:

在我的锁屏活动下的清单中,我已设置launchModesingleInstance/Task/Top. 我也试过了sendToLockScreen.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

0 投票
1 回答
133 浏览

android - 活动启动模式单实例使用

我有两个活动。WebViewActivity 和 CameraPreviewActivity

我应该能够通过单击按钮在两个活动之间切换。启动 CameraPreviewActivity 后,进一步加载 Activity 不会花费太多时间来初始化相机视图。它应该就像从以前的状态恢复一样。

通过将两个活动的启动模式保持为“单实例”并在单击相应按钮时启动活动来做到这一点是个好主意吗?

0 投票
1 回答
454 浏览

android - onActivityResult() 在调用设置活动时过早调用

我正面临onActivityResult被立即调用的已知问题。

我在一些链接上阅读了它背后的原因

建议更改被调用活动的启动模式。

但在我的情况下,我正在开始(导航到)设置活动,让用户启用数据连接。

所以我无法更改设置活动的启动模式。

我尝试为 Intent 设置一些标志,例如intent.setFlags(0);,但它不起作用。

0 投票
1 回答
1248 浏览

android - 当应用程序在单击启动器图标时启动时,启动器活动的 onCreate() 会被调用

在使用给定流程在 Android 设备中安装应用程序时,我发现 Android 应用程序存在非常奇怪的错误。

  1. 从 playstore(旧版本)安装应用程序。

  2. 启动了应用程序(现在我在 HomeScreen,.ie,HomeActivity)。

  3. 现在,我通过安装最新版本升级了应用程序(在生产版本中,尚未发布到 Playstore)。

  4. 单击启动器图标,等待主屏幕可见,然后按菜单按钮将应用程序保持在后台。

  5. 现在,通过单击启动器图标启动应用程序。

在这种情况下,Splash Screen( Activity) 会启动,然后将我带到主屏幕。在日志中,呼叫转到onStop()HomeActivity。这意味着 Activity 不会被破坏。因此,当我单击启动器图标时,它应该恢复 HomeActivity,而不是重新创建 splashActivity。但是当我从后台启动应用程序时,活动恢复并且没有显示初始屏幕。这是正确的行为吗?如果是这样,那么我没有得到回调到onDestroy().

以下是我在清单中的活动代码:

我没有将任何启动模式设置为SplashActivity. 一段时间后,它变得正确并且不显示启动画面。

此外,当我从后台启动应用程序或按下后退按钮然后单击应用程序图标时,不会重现此错误。仅当我单击启动器图标时才会发生这种情况,将应用程序保持在后台,一段时间后,它就会变得正确。

此外,当我安装应用程序而不更新时,也没有出现此问题。只有当我更新 apk 时,才会发生这种情况

为什么会在初始启动时发生这种情况..它是 android 中的错误..?如果是这样,如何避免这个问题..