当不保持活动时清除意图打开

时间:2015-09-18 06:44:34

标签: android android-intent

我有一个Activity,当intent有数据时会自动重定向到另一个活动。一个简单的片段如下

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_layout);

    Intent intent = getIntent();
    String mykey = intent.getStringExtra("MyKey");

    if (mykey != null) {
        intent.removeExtra("MyKey");
        Intent sendingIntent = new Intent(this, targetActivity.class);
        sendingIntent.putExtra("Next Key", mykey);
        startActivity(sendingIntent);
    }
}

我把它放在onCreate()中,这样如果它再次返回到此活动(例如用户从targetActivity按下后退按钮),则不会调用它,也不会再次自动重定向到targetActivity。

但是,如果DO NOT KEEP ACTIVITY被打开(对于活动被杀死的测试场景),则始终调用onCreate。并且Intent返回其调用者设置的原始值,并且重定向继续发生。

所以我想我可以在使用后删除意图。参考Clearing intent,声明要清除意图(或额外的意图),请使用

        intent.removeExtra("MyKey");

这似乎只在正常情况下有效,但在没有保持活动开启时则不行。

因此,我的问题是,有没有办法确保Intent仅在进入活动时使用一次,并被清除?即,当用户返回活动(按下后退按钮)时,无论是恢复还是重新启动(即,不保持活动已打开),应清除意图(或额外的)。

谢谢!

2 个答案:

答案 0 :(得分:0)

我猜问题是当调用intent时它总是以“MyKey”传递,并且当Do not keep被启用时,意图往往会再次调用相同的数据,因此转换总是会发生。 一个解决方案可能是使用共享首选项或某些持久性存储,如File和SQLlite ,但这些将非常慢,因为它涉及磁盘操作,当然,当应用程序来回转换此意图时,效率很低

答案 1 :(得分:0)

如果你需要这种类型的导航,最安全的方法是覆盖另一个Activity中的BACK按钮,这样按下它就不会执行标准行为(即:调用finish()然后从堆栈中删除该Activity并将用户放回到您的调度程序Activity中,但是这样做:

@Override
public void onBackPressed() {
    // Instead of just calling finish(), we want to explicitly
    //  redirect back to dispatcher activity and make sure that it doesn't redirect back here
    Intent intent = new Intent(this, DispatcherActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
}

这应该做你想做的事情,即使"不要保持活动"已启用。