Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android应用程序更新时执行代码_Android - Fatal编程技术网

在Android应用程序更新时执行代码

在Android应用程序更新时执行代码,android,Android,在我的Android应用程序中,我有一些共享的首选项,其中一个不应该在我的下一个版本中使用。但是,它的值应该在另一个共享首选项中使用。我可能只是懒惰而忽略了这一点,但用户必须在更新后进行一些设置,以使应用程序正常工作。所以我想在应用程序更新期间执行此操作,换句话说,从共享首选项中获取现有值,并将其放入新的共享首选项中,这应该在更新后执行一次 这是我的想法,但我不知道这是否是最佳做法: public class UpgradeHandler extends Application { @

在我的Android应用程序中,我有一些共享的首选项,其中一个不应该在我的下一个版本中使用。但是,它的值应该在另一个共享首选项中使用。我可能只是懒惰而忽略了这一点,但用户必须在更新后进行一些设置,以使应用程序正常工作。所以我想在应用程序更新期间执行此操作,换句话说,从共享首选项中获取现有值,并将其放入新的共享首选项中,这应该在更新后执行一次

这是我的想法,但我不知道这是否是最佳做法:

public class UpgradeHandler extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

        if (prefs.getBoolean("firstTime", true)) {
            // Make my shared preferences data migration
            // Other stuff to be done once after upgrade

            // Store to shared prefs that first time has passed
            SharedPreferences.Editor editor = prefs.edit();
            editor.putBoolean("firstTime", false);
            editor.commit();
        }
    }
}
我知道处理更新操作的机制可以放在扩展
活动的普通类中,但对于我的应用程序来说,这一共享首选项处理在更新后完成是至关重要的,因为应该更新的共享首选项可以在安装应用程序的任何时候在
BroadcastReceiver
中使用。如果我正确理解了这一点,那么在任何活动、广播接收器、服务等之前,都会调用扩展
应用程序的类及其
onCreate
方法。在这样一个类中进行更新处理应该确保在更新之后但在调用任何活动或broadcastreceiver之前始终执行我的首选项处理。这是正确的吗? 我的另一个问题是,如果我选择这样的解决方案,那么将shared preferences变量命名为firstTime是否正确,我的意思是,下次我的应用程序更新时我不能使用它。如果我需要运行一次,firstTime则为false。在一些模式中命名用于此的共享首选项(如
firstTime\u version
)不是更好的做法吗

我希望您能理解我的问题,我只想知道应用程序更新后需要执行的代码的最佳处理方式


谢谢

最好的办法是在共享首选项中有一个变量保存最后使用的版本。每次启动应用程序时,都会将这些信息与当前软件包版本进行比较。@Merlevede,好的,这是一个很好的小提示,我一定会用到。简单而干净的解决方案,但您知道扩展应用程序的类是否会在任何
活动
广播接收器
等之前运行它的
onCreate