onsavedinstance()和onpause()保存数据

onsavedinstance(Bundle savedinstancestate)方法的触发时机,其典型的情景是按home键或者切换activity,这样的activity可能被销毁的场合,但是按back键退出程序,则不会调用此方法,适合保存一些非持久性的数据(即程序运行期间需要储存的数据)。

而onpause(),不管是可能销毁还是退出程序,都必须调用,适合保存持久性的数据,但是android本身没有为此方法提供bundle参数,因此我们可以选用做一个静态变量或者是提供一个sharedpreference作为数据载体。

我练习的时候,使用了一个静态变量保存数据,改变数据以后,重新启动程序,改变的数据得到了保存,看代码:

public class MainActivity extends Activity {

    private ListView namesListView;
    private MyAdapter adapter;
    private ArrayList<String> names;
    private static Bundle outState;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("create", String.valueOf(savedInstanceState == null));
        if (outState != null) {
            names = outState.getStringArrayList("names");
        }
        else {
            names = new ArrayList<String>();
            names.add("小李");
            names.add("小刚");
            names.add("小明");
            names.add("小花");
            names.add("小红");
            names.add("小兰");
        }
        namesListView = (ListView) findViewById(R.id.nameList);
        adapter = new MyAdapter(this, names);
        namesListView.setAdapter(adapter);
    }
    private void singleRefresh(int id){
        if (namesListView != null) {
            int start = namesListView.getFirstVisiblePosition();
            int end = namesListView.getLastVisiblePosition();
            for (int i = start; i < end; i++) {
                if (id == namesListView.getItemIdAtPosition(i)) {
                    TextView view = (TextView) namesListView.getChildAt(i-start);
                    names.set(i, "我变身超级赛亚人啦!");
                    adapter.getView(i, view, null);
                    break;
                }
            }
        }
    }
    public void refresh(View v){
        singleRefresh(0);
    }
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
        //outState.putStringArrayList("names", names);
    }
    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        if (outState != null) {
            outState.clear();
            outState = null;
        }
        outState = new Bundle();
        outState.putStringArrayList("names", names);
    }

}
时间: 2024-10-26 02:47:00

onsavedinstance()和onpause()保存数据的相关文章

Android处理运行时变更保存数据状态恢复Activity

一.概述 运行时变更就是设备在运行时发生变化(例如屏幕旋转.键盘可用性及语言).发生这些变化,Android会重启Activity,这时就需要保存activity的状态及与activity相关的任务,以便恢复activity的状态. 为此,google提供了三种解决方案: 对于少量数据: 通过onSaveInstanceState(),保存有关应用状态的数据. 然后在 onCreate() 或 onRestoreInstanceState() 期间恢复 Activity 状态. 对于大量数据:用

5. 保存数据

大多数 Android 应用需要保存数据,即使仅保存在 onPause() 过程中与应用状态有关的信息,以便用户进度不会丢失. 大多数非平凡应用也需要保存用户设置,并且有些应用必须在文件和数据库中管理大量的信息. 本课向您介绍 Android 中的主要数据存储选项,包括: 在共享的首选项文件中保存简单数据类型的键值对 在 Android 的文件系统中保存任意文件 使用 SQLite 管理的数据库

Android 学习笔记之实时保存数据-现场保护onSaveInstanceState()

数据保存:在软件开发中我们希望保存下各个Activity数据,以实现客户数据的时时保存,达到较好的用户体验. 那么我们需要解决如下问题: 1.什么时候保存? 2.保存哪些数据? 我想保存应用产生的数据,而这些用户的数据是在Activity与用户进行交互的时候产生的,就是界面上的数据,或者状态. 3.如何进行保存? 4.保存到哪里? 5.编写合适的例子? 创造思路,去哪寻找答案,首先,我想保存应用产生的数据,而这些用户的数据是在Activity与用户进行交互的时候产生的,所以我们进入Activit

Activity生命周期学习笔记,和切屏、activity销毁时候保存数据和调用的方法

activity生命周期图: 下面介绍一下里面的方法: oncreat():在activity一执行就运行的,此过程加载xml里的视图控件 onstart():是在activity视图在手机屏幕上可见时候调用执行 onResme():是获取手机屏幕空间的焦点,即可以点击控件时候执行 onpause():与onResme()是相反的,手机失去控件焦点时候执行 onStop()是activity视图在手机上不可见时候执行 ondestroy():是销毁activity,随即一个activity就会结

安卓-SharedPreferences和Editor保存数据

SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对)SharedPreferences常用来存储一些轻量级的数据. 在做连连看游戏的时候,需要保存游戏进度,所以稍微用了一下,这里做个小结. 我的做法是,首先给出如下定义: private SharedPreferences sp; private static String MY_APP="MYAPP"; 然后再写两个方法,执行数

android产品研发(十)--&gt;不使用静态变量保存数据

转载请标明出处:一片枫叶的专栏 上一篇文章中我们讲解了Android中的几种常见网络协议:xml,json,protobuf等,以及各自的优缺点,一般而言主要我们的App涉及到了网络传输都会有这方面的内容,具体可根据项目的需求确定各自的网络传输协议.这里可参考android产品研发(九)–>App网络传输协议 而本文讲解的其实并不是一个技术方面,而是一个android产品研发过程中的技巧:尽量不使用静态变量保存核心数据.这是为什么呢?这是因为android的进程并不是安全的,包括applicat

不要在Application保存数据

引言: 总是有需要在很多地方在你的应用程序的一些信息.它可以是一个会话,一个昂贵的计算的结果,等,它通常是很诱人的让你避免Activity之间传递对象或保持那些在持久存储的开销. 有时候建议这个模式,这将是可用在所有Activity的Application对象.这个解决方案很简单,优雅......然后这个模式是完全错误的. 如果你认为你的数据将放在那里,那么你的应用程序将最终与一个NullPointerException异常崩溃 一个简单的案例: The Application object:

Android学习笔记-保存数据的实现方法1

Android开发中,有时候我们需要对信息进行保存,那么今天就来介绍一下,保存文件到内存,以及SD卡的一些操作,及方法,供参考. 第一种,保存数据到内存中: //java开发中的保存数据的方式 public static boolean saveUserInfo(String username,String password){ File file = new File("/data/data/com.ftf.login/info.txt"); try { FileOutputStre

要清楚磁盘是如何保存数据的

成堆的有用无用的纸.杂乱无章的书籍和办公用品散落在各处,这就是我们办公桌上的一般情形.在电脑的内部,在电脑的桌面上,在"资源管理器"中,也同样充斥着无序与混乱.这种虚拟的混乱极大地影响了电脑的性能和我们办公的效率.如果数据被误删,同样会造成很大的困扰,下面就来看看该怎么办吧! 要理解如何恢复已删除的数据,首先要搞清楚磁盘如何保存数据.硬盘驱动器里面有一组盘片,数据就保存在盘片的磁道(Track)上,磁道在盘片上呈同心圆分布,读/写磁头在盘片的表面移动访问硬盘的各个区域,因此文件可以随机