我想发送一个Intent来启动一个Activity。我希望能够修改那个Intent。然后,当活动被销毁并重新创建时,我希望在我调用getIntent()
时仍然存在这些修改。
目前,只要活动尚未销毁,修改意图就可以正常工作。如果有,那么当重新创建活动时,它将获得启动它的原始Intent,而不是第一次可能修改时启动它时收到的副本。
答案 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());
为我工作