永久修改启动活动的Intent

时间:2013-12-07 22:46:05

标签: android android-intent

我想发送一个Intent来启动一个Activity。我希望能够修改那个Intent。然后,当活动被销毁并重新创建时,我希望在我调用getIntent()时仍然存在这些修改。

目前,只要活动尚未销毁,修改意图就可以正常工作。如果有,那么当重新创建活动时,它将获得启动它的原始Intent,而不是第一次可能修改时启动它时收到的副本。

3 个答案:

答案 0 :(得分:12)

  

只要主Activity仍然存在,修改Intent以删除我的额外数据就可以正常工作,但是如果它被销毁/重新创建,那么额外的数据就会恢复。

这是因为您正在修改Intent的本地副本,而不是在操作系统进程中维护的主副本,其中保留了任务列表。

如果此数据是活动的真实实例状态,则应通过onSaveInstanceState()保存,并通过onRestoreInstanceState()返回。您图书馆的用户需要将这些事件转发给您。

如果您不希望将此视为实例状态,而是处理状态,请将数据存储在单例中。

如果数据应该超出进程的生命周期,请将其写入磁盘某处。

  

我可以将数据保存在主机应用程序的广播接收器中,然后在我的代码中使用和删除它

如果通过“将数据保存在主机应用程序的广播接收器中”,那就没有意义了。清单注册的接收器仅用于单个广播,然后完成。

答案 1 :(得分:3)

这不是正确的做法。你想要做的是保存数据吗?在这种情况下,您不必弄乱意图,只需更改值然后保存它们,下次应用程序运行时它将加载上次的值,这里是一些代码:

如何保存值:

//Create sharedPref (It's android's way of saving values)
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();

//Save Values here
editor.putInt(getString(R.string.saved_high_score), newHighScore);

//Commit changes
editor.commit();

如何加载值:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);

此处有更多信息:developer.android.com/training/basics/data-storage/shared-preferences.html

答案 2 :(得分:0)

试试

activity.setIntent(activity.getIntent());

为我工作