首页 > 其他分享 >两种保存状态的方法getSharedPreferences和onSaveInstanceState

两种保存状态的方法getSharedPreferences和onSaveInstanceState

时间:2023-04-07 10:05:41浏览次数:52  
标签:onCreate getSharedPreferences savedInstanceState Bundle 保存 onPause activity onSa


虽然这些东西很简单有时候还真的让你搞混

@Override 
protected void onPause() { 
    super.onPause(); 
 
    SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE); 
    Editor editor = prefs.edit(); 
    editor.putString("lastActivity", getClass().getName()); 
    editor.commit(); 
}



public class Dispatcher extends Activity { 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
 
        Class<?> activityClass; 
 
        try { 
            SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE); 
            activityClass = Class.forName( 
                prefs.getString("lastActivity", Activity1.class.getName())); 
        } catch(ClassNotFoundException ex) { 
            activityClass = Activity1.class; 
        } 
 
        startActivity(new Intent(this, activityClass)); 
    } 
}



上面的方法通常保存一个activity以便下次发动


2.


@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
  // Save UI state changes to the savedInstanceState. 
  // This bundle will be passed to onCreate if the process is 
  // killed and restarted. 
  savedInstanceState.putBoolean("MyBoolean", true); 
  savedInstanceState.putDouble("myDouble", 1.9); 
  savedInstanceState.putInt("MyInt", 1); 
  savedInstanceState.putString("MyString", "Welcome back to Android"); 
  // etc. 
  super.onSaveInstanceState(savedInstanceState); 
} 
@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
  super.onRestoreInstanceState(savedInstanceState); 
  // Restore UI state from the savedInstanceState. 
  // This bundle has also been passed to onCreate. 
  boolean myBoolean = savedInstanceState.getBoolean("MyBoolean"); 
  double myDouble = savedInstanceState.getDouble("myDouble"); 
  int myInt = savedInstanceState.getInt("MyInt"); 
  String myString = savedInstanceState.getString("MyString"); 
}



这个上次已经记过了用来旋转保存状态最好



对onSaveInstanceState的解释:


        为了获取activity被杀死前的状态,你应该为activity实现onSaveInstanceState() 方法。Android在activity有可能被销毁之前(即onPause() 调用之前)会调用此方法。它会将一个以名称-值对方式记录了activity动态状态的Bundle 对象传递给该方法。当activity再次启动时,这个Bundle会传递给onCreate()方法和随着onStart()方法调用的onRestoreInstanceState(),所以它们两个都可以恢复捕获的状态。


         与onPause()或先前讨论的其它方法不同,onSaveInstanceState() 和 onRestoreInstanceState() 并不是生命周期方法。它们并不是总会被调用。比如说,Android会在activity易于被系统销毁之前调用 onSaveInstanceState(),但用户动作(比如按下了BACK键)造成的销毁则不调用。在这种情况下,用户没打算再次回到这个activity,所以没有保存状态的必要。


         因为onSaveInstanceState()不是总被调用,所以你应该只用它来为activity保存一些临时的状态,而不能用来保存持久性数据。而是应该用onPause()来达到这个目的。




Google为何这样设计OnSharedPreferenceChangeListener


http://droidyue.com/blog/2014/11/29/why-onsharedpreferencechangelistener-was-not-called/


标签:onCreate,getSharedPreferences,savedInstanceState,Bundle,保存,onPause,activity,onSa
From: https://blog.51cto.com/u_5454003/6174589

相关文章

  • PageOffice既保存Word文件中指定区域的数据又保存整篇文件
    一、首先在word文件中给需要在后台获取数据的区域设置以PO_开头的书签。二、通过pageoffice在线打开文件并编辑保存。有两种打开文件的模式1、普通编辑模式(docNormalEdit)普通编辑模式就是简单的打开文件,分别设置SaveDataPage保存数据的方法和SaveFilePage保存文件的方法即可,......
  • 爬取王者荣耀皮肤并保存图片
    importrequestsimporttimeimportpathlibfromlxmlimportetreeheaders={"user-agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/108.0.0.0Safari/537.36"}url="https://pvp.qq.com......
  • Calibre修改保存电子书为中文
    已知路径肯定是英文的,,,保存到文件夹的时候可以有中文。3张图解决问题......
  • vim强制保存只读文件的方法
    在使用vim时,当我们以普通用户去打开一个只有root用户才有权限操作的文件时,我们编辑完成之后,正要保存,却发现,这个文件我们没有权限修改。每次遇到这样的问题,我都很头疼,好不容易把文件编辑完了,却无法保存,就只能放弃,然后退出,再以root权限打开,重新编辑。我总是相信,所有的问题都有解决......
  • K8S用yaml资源清单部署redis数据库,数据持久化保存
    1.创建redis存储数据目录和配置文件mkdir-p/data/redis/redis-config/touch/data/redis/redis-config/redis.confcat>>/data/redis/redis-config/redis.conf<<EOFrequirepass123456bind0.0.0.0save9001save30010save6010000EOF2.编写redis的yaml资源清单api......
  • markdown.md不保存网页编辑器
    {GrammarName}的内容提取器(Extracter)得到单词流TokenList和语法树Node后,就可以得到{GrammarName}的实际内容{ExtractedType}了。之后程序员就可以自由地对此{ExtractedType}对象进行任何操作了。实现{ExtractedType}Extracter的要点,简述如下:用后序优先遍历算法(Post-OrderTra......
  • 谷歌Chrome浏览器内直接打开编辑保存Office Word、Excel、PPT 文档,可离线部署!
    谷歌Chrome经过开发团队不断优化,凭借运行界面简单,打开速度最快及扩展插件众多,Chrome已经成为了世界上最受欢迎的浏览器。不过有一点非常可惜,由于微软Office不是开源程序,所以Chrome一直无法直接打开微软Office文档。虽然后来有一些国内厂商通过调用微软免费开源的ActiveX控件DsoFr......
  • IDEA插件google-java-format代码格式化保存时自动格式化
    安装google-java-format启用google-java-format安装saveactions启用saveactions,保存时自动格式化,将没用的import语句删除自动优化导包如果用的是2022......
  • 使用pytorch保存checkpoint以及使用checkpoint例子
    https://towardsdatascience.com/how-to-save-and-load-a-model-in-pytorch-with-a-complete-example-c2920e617dee后续在更新......
  • 疯狂安利啊啊!这个ins图片保存的最新方法我还不允许你不知道!
    友友们,经过我一夜的探索后,终于知道了ins图片保存的最新方法!而且是超清原图!!可以把ins上的照片牢牢地保存在手机相册里!!非常适合安卓党和ios党,yysds!简单到我躺在地上打滚!!首先我......