用户关闭应用程序时删除值

时间:2013-10-27 13:59:02

标签: android android-preferences

所以在我的应用程序中,我使用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 个答案:

答案 0 :(得分:1)

使用onstop覆盖来执行此操作

像这样:

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

不要在SharedPreferences中保存Fragment的实例状态,而是在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旨在保存即使在申请结束后仍应存在的值,即:偏好。

答案 3 :(得分:0)

更好的位置是没有if语句的onDestroy() 但是,您可以从Android文档中读取有关onDestroy()的信息:

  

在某些情况下,系统会在不调用此方法(或其他任何方法)的情况下简单地终止活动的托管过程,因此不应该使用它来执行过程消失后要保留的内容。

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