Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.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应用程序只更新时,我需要运行特定的代码(我特别想重新安排警报) 他们对SO进行了广泛的搜索,我发现人们建议使用SharedReference。我不认为这是正确的,因为SharedReference可以在重新启动时删除,或者只需清除缓存即可。这意味着当我的应用程序更新时,共享首选项可能不存在,我可能不知道它是更新还是简单的新安装(或者更糟糕的是重新启动) 那么,还有别的办法吗?可能是某种意图或某种执行的方法(有点像sqlite的onUpgrade) 请告知。非常感

可能重复:

当我的android应用程序只更新时,我需要运行特定的代码(我特别想重新安排警报)

他们对SO进行了广泛的搜索,我发现人们建议使用SharedReference。我不认为这是正确的,因为SharedReference可以在重新启动时删除,或者只需清除缓存即可。这意味着当我的应用程序更新时,共享首选项可能不存在,我可能不知道它是更新还是简单的新安装(或者更糟糕的是重新启动)

那么,还有别的办法吗?可能是某种意图或某种执行的方法(有点像sqlite的onUpgrade)


请告知。非常感谢

共享参考是最好的方法。除您所描述的内容外,如果用户取消安装并再次安装,则会清除该选项。如果这对您来说还不够好,您将需要在服务器上保存上次安装的版本,但这意味着您不能在脱机时运行测试。

onUpgrade for sqlite只需检查数据库是否存在,然后检查它的版本是什么。如果当前数据库的版本低于APK中的版本,则将清除该数据库并用新数据库更新该数据库。 同样,如果清除应用程序缓存。包括数据库在内的所有文件都将被清除

同样,您可以在应用程序中实现:

比如有一个静态公共int版本=1000;在你的应用程序中。在创建应用程序时,检查SharedReferences是否包含版本(即使SP不存在),它将返回saved或default方法

如果SP版本的值小于代码中的当前版本。使用您想要使用的更新功能


如果用户卸载并重新安装了应用程序,那么您也可能希望再次注册您的呼叫。

当设备重新启动时,共享pref的问题被清除。但是,数据库文件不是。如何处理此问题?重新启动时它是否会删除?检查执行情况。我没看到他们消失了。检查实现。我做了一个测试,当我重新启动设备、强制关闭应用程序或清除缓存时,共享pref被清除。它完全不可靠,我总是不惜一切代价避免使用它。为什么要清除缓存,这类似于卸载应用程序然后重新安装?清除缓存也会清除数据库吗?清除缓存不会清除数据库。我只是不希望人们错误地清除缓存,我的代码再次运行。当设备重新启动时,共享pref被清除。我不希望每次重新启动设备时都运行我的代码如果是重新启动,您的意思是重新启动,那么不,重新启动时不会清除共享优先权。正确的方法是在这里