问题标签 [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.
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() 放在前面的情况相比)。我的服务用于呈现通知的代码如下:
我说这种行为有时会发生,当它发生时,它会反复发生。例如:
- MyProblematicActivity 首次启动
- 服务启动并显示通知
- 选择通知。
- 再次创建 MyProblematicActivity(服务已启动,通知已显示)。
- 重复 2-4 次。
有时,在 #3 之后,调用 MyProblematicActivity 的 onNewIntent() 而不创建新实例,并且事情按预期工作。
我不知道为什么会发生这种情况。任务根部的状态活动是否会对我的 singleTop 活动的行为方式产生任何影响?FWIW,创建 MyProblematicActivity 的 Activity 是一个 singleTask Activity。
android - Android:创建具有多个应用程序活动的单个任务(Lauchmode 问题)
我不知道如何解决这个Android问题。简而言之,我的 2 个应用程序之间的流程如下:
流动
- 将应用程序 A绑定到市场应用程序(AIDL)中的服务
- 注册一个 BroadcastReceiver并调用一个返回 pendingIntent的服务方法。
- 启动 PendingIntent(包含 BillingActivity 实例)。
- 使用“ startActivityForResult() ”启动 PaymentActivity 。
- 做一些事情,终止(finish())。
- 在onActivitiyResult()方法中,发送一个广播并终止。
- 获取广播信息。
问题 :
我想用以下组件创建一个任务:
- Top1Activity(应用A)
- BillingActivity(市场应用)
- PaymentActivity(市场应用)
我试图改变BillingActivity + PaymentActivity "launchMode" :
单实例
为他们俩创建了一个新任务。当按下返回按钮(或调用 finish() 方法)时,用户将按预期重定向到上一个活动。问题:不能在多个任务之间使用“StartActivityForResult”(onActivityResult 被立即调用)。
单任务
在 BillingActivity 中按下返回按钮(或调用 finish() 方法)时,用户被重定向到 Top2Activity(在后台任务中)。
我已经失去了超过 48 小时试图解决它。我会很感激你的帮助。如果需要,我可以发布代码。
谢谢
----------- 编辑 2015-02-02
按照大卫的建议,我删除了所有特殊的启动模式:
TOP2Activity(背景):
我的 Top1Activity(前景):
计费活动(前台):
付款活动:
AIDL 服务返回pendingIntent:
当从 BillingActivity(或 PaymentActivity)按下返回按钮时,我仍然被重定向到 Top2Activity ...
不知道 ?谢谢
android - 使用 PendingIntent 时不尊重 singleTask 和 singleInstance?
我有一个将 launchMode 设置为 singleTask 的活动:
我有一个带有启动该活动的 PendingIntent 的持续通知:
当我与现有的 MyActivity 交互时,我点击 Home 并通过启动器重新启动 MyActivity,MyActivityonNewIntent()
会按预期调用。
问题是当我与现有的 MyActivity 交互时,我点击正在进行的通知,一个新的 MyActivity 是通过 创建onCreate()
的,而现有的 MyActivity 是通过销毁的onDestroy()
。我希望 MyActivityonNewIntent()
会被调用。为什么这不会发生?
我尝试了这些答案但没有成功:
- 意图 - 如果活动正在运行,请将其放在前面,否则启动一个新活动(来自通知)
- 如何使通知恢复而不是重新创建活动?
- FLAG_ACTIVITY_REORDER_TO_FRONT 被忽略(在这种情况下,点击通知时现有实例不会被销毁)
android - 可以通过清除顶部清除具有单个任务标志的活动吗?
假设我有一个具有 singleTask 启动模式的启动器活动 A。现在想象 A 像这样启动 Activity B;
在这种情况下,A 似乎没有被破坏。我想知道这是正确的还是我做错了什么?
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 实例。
android - 为什么 Android 会在 singleTask 或 singleInstance 上启动多个实例?
我想要达到的目标:
MainActivity 应该被重用,换句话说,我不想onCreate()
再次运行,但只能onResume()
在同一个 Activity 上,但我有一个奇怪的行为。似乎launchMode
AndroidManifest 中的 被忽略了。无论我设置什么 ( singleTask
, singleInstance
),它总是会创建一个导致堆增长的新 Activity。当我使用主页按钮退出应用程序并重新启动它时,每次都会创建一个新实例。(在 .hprof 泄漏报告中观察到这一点)。
这是它的外观:
当我试图隔离问题时,我看到 Activity 将在按下 home 时被杀死(onDestroy()
被执行),但泄漏报告显示了这一点。每次启动应用程序时,我都会获得越来越多的 MainActivity 实例,尽管最后一个实例被认为已被销毁。怎么可能onDestroy()
被执行了,但是我启动 Activity 的实例有多少(直接通过应用启动):
执行起来也很有趣onDestroy()
,因为我从不打电话finish()
,而且我还有很多资源。所以Android没有必要杀掉Activity,但是上层问题一开始更重要。也许是因为我finish()
在 MainActivity 的 on 中杀死了所有片段onPause()
。否则碎片会泄漏。片段的onDestroy()
调用super.onDestroy()
可能是 MainActivity。
android - 覆盖 HOME 按钮以模仿 BACK 按钮或更快地启动 Activity
我想覆盖 HOME 按钮,使其行为与 Android 中的 BACK 按钮完全相同。我在这个网站上看过类似的问题,但它们不起作用。
我目前正在构建一个锁屏,并在屏幕关闭时设法在安全密码上方打开一个活动。这样,一旦用户决定重新打开屏幕,活动就会打开。
这行得通,但我的BroadcastReceiver
内部 aService
非常慢。如果我足够快地单击电源按钮,则活动不会立即打开,并且用户能够在我的活动之前看到安全密码(这违背了我的应用程序的目的)。
当活动打开时单击后退按钮,然后快速关闭和打开我的屏幕,活动也会快速打开。但是,如果我单击 HOME 按钮,则该活动需要几秒钟才能再次启动。据我所知,这与每个按钮如何管理堆栈有关。
我已经尝试过使用singleTask
等,以便活动不会重新启动,而只是移动到前面。这也不起作用。我剩下要做的就是模仿后退按钮的行为,但这可能吗?
我的接收器和服务是:
在我的锁屏活动下的清单中,我已设置launchMode
为singleInstance/Task/Top
. 我也试过了sendToLockScreen.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
。
android - 活动启动模式单实例使用
我有两个活动。WebViewActivity 和 CameraPreviewActivity
我应该能够通过单击按钮在两个活动之间切换。启动 CameraPreviewActivity 后,进一步加载 Activity 不会花费太多时间来初始化相机视图。它应该就像从以前的状态恢复一样。
通过将两个活动的启动模式保持为“单实例”并在单击相应按钮时启动活动来做到这一点是个好主意吗?
android - onActivityResult() 在调用设置活动时过早调用
我正面临onActivityResult
被立即调用的已知问题。
我在一些链接上阅读了它背后的原因
建议更改被调用活动的启动模式。
但在我的情况下,我正在开始(导航到)设置活动,让用户启用数据连接。
所以我无法更改设置活动的启动模式。
我尝试为 Intent 设置一些标志,例如intent.setFlags(0);
,但它不起作用。
android - 当应用程序在单击启动器图标时启动时,启动器活动的 onCreate() 会被调用
在使用给定流程在 Android 设备中安装应用程序时,我发现 Android 应用程序存在非常奇怪的错误。
从 playstore(旧版本)安装应用程序。
启动了应用程序(现在我在 HomeScreen,.ie,
HomeActivity
)。现在,我通过安装最新版本升级了应用程序(在生产版本中,尚未发布到 Playstore)。
单击启动器图标,等待主屏幕可见,然后按菜单按钮将应用程序保持在后台。
现在,通过单击启动器图标启动应用程序。
在这种情况下,Splash Screen( Activity
) 会启动,然后将我带到主屏幕。在日志中,呼叫转到onStop()
HomeActivity。这意味着 Activity 不会被破坏。因此,当我单击启动器图标时,它应该恢复 HomeActivity,而不是重新创建 splashActivity。但是当我从后台启动应用程序时,活动恢复并且没有显示初始屏幕。这是正确的行为吗?如果是这样,那么我没有得到回调到onDestroy()
.
以下是我在清单中的活动代码:
我没有将任何启动模式设置为SplashActivity
. 一段时间后,它变得正确并且不显示启动画面。
此外,当我从后台启动应用程序或按下后退按钮然后单击应用程序图标时,不会重现此错误。仅当我单击启动器图标时才会发生这种情况,将应用程序保持在后台,一段时间后,它就会变得正确。
此外,当我安装应用程序而不更新时,也没有出现此问题。只有当我更新 apk 时,才会发生这种情况
为什么会在初始启动时发生这种情况..它是 android 中的错误..?如果是这样,如何避免这个问题..