用户退出应用程序时如何在共享首选项中存储值?

How to store value in Shared Preferences when user quits from application?

当用户退出我的应用程序时,如何在 Sharedpreferences 中存储值?

我试过这段代码,但它对我不起作用:

@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    //enter code here
    super.onDestroy();
    editor.putString("Check_activity", "true");
    editor.commit();
}  

这是一个在计算器中保存静音按键模式首选项的示例:

public class Calc extends Activity {
    public static final String PREFS_NAME = "MyPrefsFile";

    @Override
    protected void onCreate(Bundle state){
       super.onCreate(state);
       . . .

       // Restore preferences
       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
       boolean silent = settings.getBoolean("silentMode", false);
       setSilent(silent);
    }

    @Override
    protected void onStop(){
       super.onStop();

      // We need an Editor object to make preference changes.
      // All objects are from android.context.Context
      SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
      SharedPreferences.Editor editor = settings.edit();
      editor.putBoolean("silentMode", mSilentMode);

      // Commit the edits!
      editor.commit();
    }
}

如果用户使用主页按钮退出应用程序,则不一定调用 onDestroy()。

看看 Android Activity android 应用的生命周期。
选择另一个功能,例如onPause() 保存重要信息。

请注意 onStop()onDestroy() 通常是可以杀死的。在该方法 returns 之后,托管 activity 的进程可能随时被系统杀死,而无需执行其另一行代码。因此,您应该使用 onPause() 方法将任何持久数据(例如用户编辑)写入存储。

此外,方法 onSaveInstanceState(Bundle) 在将 activity 置于这样的背景状态之前被调用,允许您将 activity 中的任何动态实例状态保存到给定的捆绑包,如果 activity 需要重新创建,稍后将在 onCreate(Bundle) 中收到。

例如,考虑以下应用程序代码片段:

public class DemoActivity extends Activity {
     ...

 static final int DATA_ONE = 0;
 static final int DATA_TWO = 1;

 private SharedPreferences mPrefs;
 private int mData;

 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);

     SharedPreferences mPrefs = getSharedPreferences();
     mData = mPrefs.getInt("data_no",DATA_ONE);
 }

 protected void onPause() {
     super.onPause();

     SharedPreferences.Editor ed = mPrefs.edit();
     ed.putInt("data_no", mData);
     ed.commit();
 }
 }