android – 当用户按下按钮然后最近的应用程序按钮时,意图数据不会清除

我对我正在开发的应用程序中遇到的这种行为感到困惑……

短:

用户按下后退按钮离开应用程序然后按下最近的按钮重新进入应用程序时,意图数据不会清除. (每隔一个案例,意图数据被清除)

长:

我有一个带有启动画面的应用程序,用于收集从URI方案传入的数据.然后我设置了将数据转发到主要活动的意图.主要活动包含片段,基于主/详细模板.

在所有情况下都清除了意图数据,例如按下主页按钮然后返回应用程序,按下最近的应用程序按钮,然后返回到应用程序等.唯一不会清除意图数据的情况是当用户按下后退按钮,然后是最近的应用程序按钮以返回应用程序.

涉及意图的相关代码片段:

// Splash Screen Activity
@Override
protected void onPostExecute(Void result) {
    // Data is done downloading,pass notice and app ids to next activity
    Intent intent = new Intent(getBaseContext(),ListActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra("id1",id1);
    intent.putExtra("id2",id2);
    intent.putExtra("id3",id3);
    startActivity(intent);
    finish();
}


// ListActivity retrieving intent data
Intent intent = getIntent();
if (intent != null) {
    this.id1 = intent.getExtras().getString("id1");
    this.id2 = intent.getExtras().getString("id2");
    this.id3 = intent.getExtras().getString("id3");
}


// ListActivity clearing intent data
@Override
public void onPause() {
    super.onPause();
    // Clear intent data
    Intent intent = getIntent();
    intent.putExtra("id1","");
    intent.putExtra("id2","");
    intent.putExtra("id3","");
}

我想要注意,我也尝试过使用intent.removeExtra(“id1”),但这也没有用.

知道发生了什么事吗?即使始终调用onPause()来清除意图数据,就好像Android保持旧意图一样.

解决方法

实际上,这是因为Android从历史中启动应用程序,因此意图附加功能仍在那里

参考这个问题Android: Starting app from ‘recent applications’ starts it with the last set of extras used in an intent

所以添加这个条件来处理这个特殊情况为我修复了它

int flags = getActivity().getIntent().getFlags();       
if ((flags & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
    // The activity was launched from history
    // remove extras here
}

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...