Android Activity Intent 关闭后仍然存在

2024-01-16

SETUP一个 Activity(SingleTop)从通知接收意图。意图被活动所消耗。用户点击后退按钮结束活动。 onDestory 被调用并且 isFinishing() 返回 true。长按 Home 键即可调出最近使用的应用程序。启动之前关闭的应用程序。

当用户在 Activity 上按下 Home 键后调用 onStop 时,onNewIntent 也会发生类似的情况。

Problem活动完成后重新创建时,将使用通知中的相同意图。我不想要这个。有没有办法告诉系统我们已经使用了该通知,因此停止将其提供给活动?解决办法吗?建议?

我尝试过的

  1. 我试图从意图中删除多余的内容。不工作。学习活动意图数据随机返回,为什么? https://stackoverflow.com/questions/5032098/clearning-activitys-intent-data-randomly-comes-back-why
  2. 我尝试使用 saveInstanceState() 来保留意图的时间戳。然而,当 Activity 被销毁时,onIstanceState(Bundle) 会被移除(onCreate 中为 null)。
  3. 我尝试在活动中将意图设置为空,但这不起作用

这个问题与这个问题非常相似:http://grokbase.com/t/gg/android-developers/119jyzf492/getintent-removeextra-in-activity-doesnt-work-for-android-launchmode-“singletask” http://grokbase.com/t/gg/android-developers/119jyzf492/getintent-removeextra-in-activity-doesnt-work-for-android-launchmode-%E2%80%9Csingletask%E2%80%9D


在我看来,这是一种解决方法,而不是解决方案。

问题

请记住,问题在于 onCreate() 和 onNewIntent() 无论如何都会给 Activity 提供相同的意图(没有什么是粘性的)。最严重的罪犯是 onCreate() 因为捆绑已保存实例状态始终为空。

解决方法

我创建了一个可序列化(让我们调用为 sFOO)类,该类保存意图操作和来自意图附加项的时间戳。在 onCreate() 期间,我加载这个序列化类 (sFOO)。在 onStart() 期间,我将 sFOO 与正在处理的意图进行比较。如果一切都是新的,我知道需要处理意图并更新 sFoo 然后保存。如果不是,我会忽略这个意图。

您需要代码吗?

在 onStart() 中

Intent activityIntent = this.getIntent();       
    if (activityIntent != null)
    {                         
        if (activityIntent.getAction() != null)
        {                       
            boolean newIntent = false;
            
            //Is the intent action being processes same as previous? 
            if (activityIntent.getAction().compareTo(this.mLastProcessedIntent.mLastIntentProcessedAction) == 0)
            {
                if (activityIntent.getExtras() != null)
                {
                    //Is the intent time stamp being processed same as previous?
                    if (activityIntent.getExtras().getLong(TIME_STAMP_KEY) != this.mLastProcessedIntent.mLastIntentProcessedTimestamp)
                    {                           
                        newIntent = true;                                                       
                    }
                }
            }
            else
            {
                Log.d(TAG,"Last processed intent action does not equal new one.");
                newIntent = true;
            }

            if (newIntent)
            {
                 updateAndSaveProcessedIntent();
                 /*YOUR CODE HERE TO HANDLE INTENT*/
            }

        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Activity Intent 关闭后仍然存在 的相关文章

随机推荐

  • 如何在 Android 中以编程方式启动主屏幕 [重复]

    这个问题在这里已经有答案了 我想用我的应用程序启动 Android 的主屏幕 主要目标是当用户按下专用键时向用户显示所有应用程序 其实 方式并不重要 有想法这样做吗 这是启动 HomeActivity 的代码 Intent startMai
  • devDependency 会影响包大小吗?

    我仔细寻找 找不到这个问题的直接答案 执行我添加的软件包devDependencies实际上最终会出现在生产包 JS 文件中并从而影响其大小 或者只是dependencies进入捆绑包 不 它不会影响您的包大小 因为这些包仅在开发模式下使用
  • ActiveRecord 嵌套 SELECT

    我需要有关 SELECT FROM 嵌套 SELECT 的帮助 如何以 ActiveRecord 方式重写以下查询并获取 Relation 对象 SELECT candidates FROM SELECT candidates first
  • stringr、str_extract:如何进行正向后查找?

    很简单的问题 我只需要使用正则表达式正向查找捕获一些字符串 但我没有找到一种方法来做到这一点 这是一个例子 假设我有一些字符串 library stringr myStrings lt c MFG acme something else M
  • 具有重叠间隔时间序列的 groupby

    我在 python pandas dataframe 对象中有一个时间序列 我想根据索引创建一个组 但我想要重叠的组 即组不不同 header sec 是索引列 每组包含一个 2 秒的窗口 输入数据帧 header sec 1 17004
  • 如何在处理中计算从 mouseX、mouseY 到矩形的距离()

    如果它是一个点的距离 那就是 dist mouseX mouseY x y for point x y 但我如何计算从鼠标当前位置到 rectMode CORNERS rect x1 y2 x2 y2 Thanks 像这样的事情应该这样做
  • 如何调整滚动复合材料的大小以使其始终水平适合其内容?

    我有一个滚动复合材料 它包含一个 tableViewer 我的要求是 如果表格宽度增加 滚动组合不应显示水平滚动 但应扩展以适合表格的大小 我在这里使用滚动复合的唯一原因是我想显示垂直滚动条 如果你想控制滚动条Table在 SWT 中 它是
  • 将动画 Maya 模型转换为 JSON 以与三个 js 一起使用

    我有一个在 Maya 2008 中完成的 Maya 模型 我需要能够将其转换为 JSON 格式以便与三个 js 一起使用 到目前为止 我已经尝试过 1 ThreeJsFileTranslator py 它是一个用于导出模型的 Maya 插件
  • 如何在telnet客户端上实现命令历史记录? (向上/向下箭头)

    我有一台接受 telnet 连接进行管理的服务器 我错过了命令历史记录 因此我想让我的 telnet 会话支持它 我的问题 1 我是否必须在服务器端实现这一点 以便服务器将过去的命令发送到客户端 然后客户端可以重新执行 2 是否有办法在te
  • PHP < 5.2 的 spl_object_hash (对象实例的唯一 ID)

    我正在尝试获取 PHP 5 中对象实例的唯一 ID 功能 spl object hash http php net manual en function spl object hash php从 PHP 5 2 开始可用 但我想知道是否有针
  • 为什么 Coffeescript 认为影子是一个坏主意

    我想切换到 Coffeescript 一段时间了 昨天我以为我终于被卖了 但后来我偶然发现阿明 罗纳彻文章 http lucumr pocoo org 2011 12 22 implicit scoping in coffeescript
  • 为什么我无法在 jquery 1.4.4 之后设置背景位置动画?

    I see here https stackoverflow com questions 5075368 jquery and animate backgroundposition no longer works in version 1
  • Tensorflow安装OS X

    我正在尝试在 El 10 11 1 上安装 TensorFlow 但在创建和安装 pip 包时遇到问题 我根本不理解 我成功安装了 Bazel SWIG 和 NumPy按照说明 http tensorflow org get started
  • 从格子直方图中提取值

    我使用创建了一个等面积直方图histogram 然而 在格子中 我似乎找不到一种方法来提取 20 个大小相等的箱中的值 有什么建议么 我也研究过使用 ggplot2 但我无法创建相同面积大小的数据箱 同时具有使用提取数据的能力ggplot
  • MySQL的index_length是以字节为单位的吗?

    MySQL文档将index length定义为 索引文件的长度 但没有指定单位 是字节吗 http dev mysql com doc refman 5 1 en show table status html http dev mysql
  • 如何在 MATLAB 的 mex c++ 函数中循环遍历矩阵元素?

    我正在尝试使用 mex 来索引为 MATLAB 编写外部 C 函数来操作矩阵 但无法使用多维索引 有提供例子here http www mathworks co uk help matlab matlab external table of
  • Twitter OAUTH - 返回响应代码“0”

    我尝试使用 Matt Harris 的 Twitter OAUTH 库 https github com themattharris tmhOAuth 用我的密钥和令牌替换默认数据 但由于某种原因我无法获得有效的响应代码 我正在测试的网址以
  • 检测其他应用程序何时尝试使用相机

    我们的应用程序作为后台服务运行 不断从前置摄像头获取图像 然后对图像进行处理 然而 当用户尝试打开另一个使用相机的应用程序时 会发生两种情况 要么新应用程序崩溃而我们的应用程序继续运行 要么我们崩溃而新应用程序可以访问相机 现在 如果我们的
  • 如何使用Slim框架获取POST请求实体

    我已经发送了JSON使用 android java 的数据 通过在 post 实体中设置它 如下所示 HttpPost httpPostRequest new HttpPost URLs AddRecipe StringEntity se
  • Android Activity Intent 关闭后仍然存在

    SETUP一个 Activity SingleTop 从通知接收意图 意图被活动所消耗 用户点击后退按钮结束活动 onDestory 被调用并且 isFinishing 返回 true 长按 Home 键即可调出最近使用的应用程序 启动之前