这似乎是这个博客第一篇原创代码文章……?

是的没错虽然时间比 Intent 篇要早但是我还是给按到第二篇了.png

SharedPreferences 可以用来保存键值对,这里可以利用它来判断应用是否首次运行。

首先,新建一个 firstRun() 方法,把它设置为 private 且无返回值即可。

private void firstRun(){

}

接着,我们要借用 SharedPreferences.Editor 来获取一个相应的对象,这里我们将这个数据文件保存为data.xml,代码如下(这里这个 SharedPreferences.Editor 对象被命名为firstRun

SharedPreferences.Editor firstRun = getSharedPreferences("data",Context.MODE_PRIVATE).edit();

顺手读取 SharedPreferences(这里这个 SharedPreferences 对象被命名为firstBool

SharedPreferences firstBool = getActivity().getSharedPreferences("data",Context.MODE_PRIVATE);

然后我们用非常简单的 if 判断语句来判断是否第一次运行

if((firstBool.getBoolean("firstRun",true))){
    /*
    ...CODE...
    */
    firstRun.putBoolean("firstRun",false);
    firstRun.apply();
}

由于 getBoolean() 这个方法本身的特性,如果不存在 firstRun 这个键,就会被新建一个并且赋值为紧接着的值(这里我们是 true

if 判断是否为真,由于首次运行,此时执行了括号内的代码,firstRun 键被赋值为 true

但是在我们运行完需要执行的符合首次运行的代码后,只需要重新往 firstRun 键中写入 false 即可。

这样,在后面的运行中由于 firstRun 键一直是 false 状态,需要执行的符合首次运行的代码将永远不会被再次运行。

完整代码:

private void firstRun(){
    SharedPreferences.Editor firstRun = getActivity().getSharedPreferences("data",Context.MODE_PRIVATE).edit();
    SharedPreferences firstBool = getActivity().getSharedPreferences("data",Context.MODE_PRIVATE);
    if((firstBool.getBoolean("firstRun",true))){
    /*
    ...CODE...
    */
    firstRun.putBoolean("firstRun",false);
    firstRun.apply();
    }
}