当前位置: 首页 > 知识库问答 >
问题:

每次调用onDestroy()并从最近使用的应用程序列表中打开活动时创建的意图

汪栋
2023-03-14
@Override
protected void onCreate(Bundle savedInstanceState) { 
  Intent intent = getIntent();
  String action = intent.getAction();
  String type = intent.getType();

  if (intent.ACTION_SEND.equals(action) && type != null) {
    sharedData = FileHandler.handleSendText(intent);
  }
}

@Override
protected void onNewIntent(Intent intent) {
    String action = intent.getAction();
    String type = intent.getType();

    if (intent.ACTION_SEND.equals(action) && type != null) {
        sharedData = FileHandler.handleSendText(intent);
    }

    super.onNewIntent(intent);
}

@Override
protected void onDestroy() {
    if (android.os.Build.VERSION.SDK_INT >= 21) {
        finishAndRemoveTask();
    } else {
        finish();
    }

    super.onDestroy();
}

我在应用程序中有一个奇怪的行为,当创建新的活动实例时,传入的文本通过onCreate方法存储在sharedData变量中,当调用应用程序onDestroy方法(通过按后退按钮)并从最近使用的应用程序开始活动时,调用onCreate方法是正常的,但intent.getAction()和intent.getType()也返回有效值,如果condition正在执行!为什么会这样?

共有1个答案

韩刚洁
2023-03-14

不幸的是,这是故意的:-(

当您从“最近的任务”列表中选择一个应用程序时,它将以与最初启动应用程序时使用的相同的意图启动该应用程序。在您的示例中,意图带有发送操作。

要解决这个问题,您需要检查应用程序是否从“最近的任务”列表中启动,然后相应地执行(即:忽略操作)。像这样:

@Override
protected void onCreate(Bundle savedInstanceState) { 
    Intent intent = getIntent();
    if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
        // The activity was launched from history
    } else {
        String action = intent.getAction();
        String type = intent.getType();
        if (intent.ACTION_SEND.equals(action) && type != null) {
            sharedData = FileHandler.handleSendText(intent);
        }
    }
}
 类似资料:
  • 我正在开发一款针对ICS手机的应用程序。 在应用程序中,我有一个飞溅屏幕和几个其他屏幕,可以从飞溅屏幕或通过NFC触摸启动。我的一个活动包含以下意图过滤器: 由于某些原因,我无法理解,每当启动包含上述意图过滤器的活动时,当用户按下“主页”按钮时,该活动不会出现在“最近的应用”列表中。通过调试器,我验证了它没有被销毁,只是停止了。 如果启动屏幕在ThingActivity之前打开,则启动将显示在最近

  • 我正在实施GCM。我的应用程序有两个活动,比如和。我正在使用此代码从通知栏启动: NotificationBar打开带有Intent的活动,说“B-通知-意图”,然后我使用后退按钮从打开活动,然后我再次启动从有一个新的Intent(说“B-A-意图”)。我使用下面的代码: 然后我在中获得新数据(即的屏幕被刷新)。但如果我按下Home(主页)按钮,然后从最近的应用程序启动应用程序,那么我会变老屏幕上

  • 编辑24/11/2016:我刚刚收到来自Firebase支持的消息。他们认为这是华硕的问题。我使用的设备是华硕ZenFone 2激光器。以下是他们的回应: 从你的测试结果来看,情况似乎并非如此。但是华硕还有很多其他的方法可以让通知停止工作,不幸的是我们无法检查所有的方法。 您最好联系华硕支持,如果有任何消息让我们知道。 因为这对我的客户来说是一个低优先级的问题,所以我现在不打算进一步探讨它。不幸的

  • 我是android开发的新手,我的应用程序在调用特定活动时会崩溃。(“governanaceactivity”是活动的名称)当我从MainActivity调用治理活动时,我的应用程序会崩溃,其他菜单工作得很好,唯一的问题是这个活动。 这是GovernanceActivity **所有其他活动都很好,只有这个活动有问题 这是我的宣言** Blockquote 05-21 03:09:53.747 1

  • 当我收到通知时,我的应用和活动在我最近的应用列表中。当我点击通知时,我希望通知的意图得到尊重。在我的例子中,我想重新启动活动(暴力)并传递新的意图:所以,完成,然后重新创建。我正在阅读一些标签,比如和,但我对它们的理解还不够,不知道如何强制“完成然后重新创建”我的活动。哦,这个活动就是main ACTIVITY。 GcmListenerService中的代码片段使用 用于发送通知意图 或者说 如果

  • 问题内容: 简而言之,举一个例子,我基本上有一个包含3个活动的应用程序:Activity1 Activity2 StartActivity StartActivity包含两个分别与其他两个活动相对应的按钮,以将其启动。如果我从Activity1退出该应用程序,则稍后在手机中单击该应用程序图标时,由于Android会跟踪该事件,因此Activity1将重新启动。我需要重新启动应用程序才能将我带到St