Android 当用户关闭应用程序时删除值
因此,在我的应用程序中,我使用Android 当用户关闭应用程序时删除值,android,android-preferences,Android,Android Preferences,因此,在我的应用程序中,我使用SharedReferences保存片段状态。但是一旦用户走出应用程序,我想删除SharedReferences中的那些条目。我尝试了以下方法: public void removePreferences(){ editor.clear(); editor.commit(); } 在我的主课上: @Override protected void onPause() { // TODO Auto-generated method stub
SharedReferences
保存片段状态。但是一旦用户走出应用程序,我想删除SharedReferences
中的那些条目。我尝试了以下方法:
public void removePreferences(){
editor.clear();
editor.commit();
}
在我的主课上:
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
if(isFinishing() == true)
{
SM.removePreferences();
}
}
其中SM是我创建的助手类的实例。“首选项”执行以下操作:
public void removePreferences(){
editor.clear();
editor.commit();
}
但我注意到这件事从未执行过。通过日志,我确实看到应用程序进入了isFinishing()if语句中,但该方法从未执行过。我也尝试了onDestroy()
,但该方法从未被调用
有人能帮我吗?使用顶部覆盖来完成此操作 像这样:
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
if(isFinishing() == true)
{
SM.removePreferences();
}
}
@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);
}
使用顶部覆盖来完成此操作 像这样:
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
if(isFinishing() == true)
{
SM.removePreferences();
}
}
@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);
}
我认为可以使用
onSaveInstanceState
机制来实现您想要的
尽管如此,我还是会尝试回答您的特定问题,同时假设说“该方法从未实现”,您的意思是if语句值始终为false,并且您的方法不会被调用
isFinishing()
仅当您在活动
上调用finish()
或其他人请求完成时,才会返回true
。
如果您只需单击home按钮,就会得到isFinishing()
=false
,因此不会调用您的方法。因此,请确保您实际完成了活动
,而不仅仅是暂停它
无论如何,找出问题所在的最佳方法是使用调试器。我认为您要查找的内容可以使用
onSaveInstanceState
机制实现
尽管如此,我还是会尝试回答您的特定问题,同时假设说“该方法从未实现”,您的意思是if语句值始终为false,并且您的方法不会被调用
isFinishing()
仅当您在活动
上调用finish()
或其他人请求完成时,才会返回true
。
如果您只需单击home按钮,就会得到isFinishing()
=false
,因此不会调用您的方法。因此,请确保您实际完成了活动
,而不仅仅是暂停它
无论如何,找出问题所在的最佳方法是使用调试器。不要将片段的实例状态保存在
SharedReferences
中,而是保存在要执行此操作的捆绑包中。您可以这样访问它:
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
if(isFinishing() == true)
{
SM.removePreferences();
}
}
@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);
}
这样你就不必自己管理价值观了
如果有自定义对象,可以使其实现
与此相反,
SharedReferences
用于保存即使在应用程序关闭后仍应保留的值,即:首选项。不要将片段的实例状态保存在SharedReferences
中,而是保存在用于保存的捆绑包中。您可以这样访问它:
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
if(isFinishing() == true)
{
SM.removePreferences();
}
}
@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);
}
这样你就不必自己管理价值观了
如果有自定义对象,可以使其实现
相比之下,
SharedReferences
用于保存即使在应用程序关闭后仍应保留的值,即:首选项。更好的方法是在onDestroy()中不使用if语句。但是,您可以从Android文档中阅读关于onDestroy()的内容: 在某些情况下,系统会简单地终止活动的宿主进程,而不在其中调用此方法(或任何其他方法),因此不应使用它来执行在进程结束后仍保留的操作
因此,在我看来,如果您不希望数据在活动结束后保留,那么应该使用类来保存它。更好的方法是在onDestroy()中不使用if语句。
但是,您可以从Android文档中阅读关于onDestroy()的内容: 在某些情况下,系统会简单地终止活动的宿主进程,而不在其中调用此方法(或任何其他方法),因此不应使用它来执行在进程结束后仍保留的操作
因此,在我看来,如果您不希望数据在活动结束后保留,您应该使用类来保存它。
应用程序在isFinishing()if语句中,但该方法从未实现过。如果代码进入If
块,则必须执行该方法。你凭什么说不是?顺便说一句,logcat不是解决此类问题的好方法。相反,您应该使用调试器。这就是它的目的。此外,共享首选项并不是存储应用程序退出时将删除的状态的好方法。您建议我如何执行保存状态的操作。。。因为这是我最后的办法@Simon“你建议我怎么做拯救各州的事情”——因为不清楚“各州”是什么或者你为什么要“拯救”它们,这是不可能回答的。但是,我同意Simon的观点:不要将不希望包含在文件中的内容放在文件中。应用程序在isFinishing()if语句中,但该方法从未实现过
。如果代码进入If
块,则必须执行该方法。你凭什么说不是?顺便说一句,logcat不是解决此类问题的好方法。相反,您应该使用调试器。这就是它的目的。此外,共享首选项并不是存储应用程序退出时将删除的状态的好方法。您建议我如何执行保存状态的操作。。。因为这是我最后的办法@Simon“你建议我怎么做拯救各州的事情”——因为不清楚“各州”是什么或者你为什么要“拯救”它们,这是不可能回答的。然而,我同意西蒙的观点:不要把东西放在