1

所以在我的应用程序中,我SharedPreferences用来保存片段状态。SharedPreferences但是,一旦用户走出应用程序,我想删除这些条目。我尝试了以下方法:

在我的主要课程中:

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
    if(isFinishing() == true)
    {
        SM.removePreferences();
    }
}

其中 SM 是我创建的辅助类的一个实例。removerPreferences 执行以下操作:

public void removePreferences(){
    editor.clear();
    editor.commit();
}

但我注意到这从未被执行。通过日志,我确实看到应用程序进入了 isFinishing() if 语句,但该方法从未执行。我也尝试过onDestroy(),但从未调用过该方法。

有人可以帮我吗?

4

4 回答 4

1

使用 onstop override 来做到这一点

像这样:

@Override
protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    if(isFinishing() == true)
    {
        SM.removePreferences();
    }
}
于 2013-10-27T14:04:16.433 回答
0

不要将 Fragment 的实例状态保存在 中SharedPreferences,而是保存在 Bundle 中。您可以像这样访问它:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if ((savedInstanceState != null) {
        // get your values, for example:
        mID = savedInstanceState.getInt("ID");
    }
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    // put your values, for example:
    outState.putInt("ID", mID);
}

这样您就不必自己管理这些值。

如果你有自定义对象,你可以让它们实现Parcelable

相反,SharedPreferences旨在保存即使在应用程序关闭后仍应保留的值,即:首选项。

于 2013-10-27T14:34:37.453 回答
0

更好的位置是 onDestroy() 没有 if 语句。
但是,您可以从有关 onDestroy() 的 Android 文档中了解到:

在某些情况下,系统会简单地终止 Activity 的宿主进程,而不会在其中调用此方法(或任何其他方法),因此不应使用它来执行打算在进程消失后保留的事情。

所以,在我看来,如果你不想在活动结束后保留​​数据,你应该使用一个类来保存它。

于 2013-10-27T14:45:25.780 回答
0

我认为您正在寻找的东西可以使用onSaveInstanceState机制来实现。

尽管如此,我会尝试回答您的具体问题,同时假设说“该方法从未实现”您的意思是 if 语句值始终为 false 并且您的方法不会被调用。

isFinishing()true仅当您调用或其他人要求完成finish()时才返回。Activity如果您只是单击主页按钮,您将获得isFinishing()== false,因此您的方法不会被调用。因此,请确保您实际上正在完成Activity而不是只是暂停它。

无论如何,找出问题所在的最佳方法是使用调试器。

于 2013-10-27T14:04:27.660 回答