【问题标题】:launchMode stops extra from transfer in intentlaunchMode 停止额外的意图转移
【发布时间】:2017-08-25 00:38:19
【问题描述】:

我一直在试图弄清楚为什么我的 Intent 不会将字符串数据从一个活动传输到另一个活动?我似乎在清单文件夹中设置了 launchMode = singleTask,当我将 launchMode 更改为标准时,Intent 代码按预期工作。 MainActivity 是堆栈中的第一个活动,我猜我几个月前进行了设置,以尝试阻止用户使用后退按钮导航回密码登录页面。 (主活动)

我有点理解 Back Stack 的想法,但为什么这个设置会阻止意图传输数据。我的传输测试是 System.out.println 语句?

【问题讨论】:

    标签: java android android-intent android-manifest


    【解决方案1】:

    假设您有活动 A 和 B。A 是具有android:launchMode="singleTask" 的活动。 A 启动 B。B 然后启动 A,导致 A 的现有实例返回到前台。

    在这种情况下,用onNewIntent() 调用A,而那个 Intent 将拥有B 的附加功能。

    onCreate() 仅在创建活动时调用。

    【讨论】:

    • 所以我的意图构造就像 Intent i = new Intent (bla.this,A class) 如果我知道我应该使用 onNewIntent 感谢您的快速回复
    • @Grendel:是的。活动的第一个Intent 转到onCreate(),因为正在创建活动。如果通过Intent 标志或launchMode 或其他方式,您最终重用了现有的活动实例,则第二个和后续的Intents 转到onNewIntent(),因为活动已经创建。
    • 我相信你,但我不能在发送活动中输入 onNewIIntent(A.this,B.class) 你说在接收活动中使用 onNewIntent 吗?正如代码一样,首先创建意图 Intent i = new Intent(DetailsActivity.this,MainActivity.class); i.putExtra("key","true");开始活动(一);捆绑附加服务 = getIntent().getExtras(); if (extras != null) { dothat = extras.getString("key");
    • @Grendel:和onCreate()一样,onNewIntent()是一个回调方法。你自己不叫它。您在我的回答中描述的活动 A 中覆盖它。
    • 那么使用 singleTask 有什么好处吗?如果是这样,您是否愿意详细说明以阅读我的 Commons Ware 书籍来解决这个问题,它需要更多的学习,谢谢
    猜你喜欢
    • 2015-05-11
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    相关资源
    最近更新 更多