gpt4 book ai didi

android - 在 Activity 被销毁之前安全地保存数据

转载 作者:行者123 更新时间:2023-11-29 00:10:48 25 4
gpt4 key购买 nike

当用户关闭我的应用程序时,我需要保存一些至关重要的数据。我更喜欢在 ActivityonPause() 中执行此操作,因为它是保证在应用程序被销毁之前调用的最新方法,无论它的原因是什么破坏。但是,我将数据保存在数据库中,因此我使用了 AsyncTask。从我的 AsyncTask 中,当它完成时,我在我之前保存在 AsyncTask 中的 Activity 引用上调用回调方法,我把一些SharedPreferences 的变量表明数据已成功放入数据库。

我的问题是: AsyncTask 是否保证在它被销毁之前完成并在 Activity 的 Activity 引用上调用回调?如果不是,如何确保在 Activity 销毁之前将数据写入数据库?

最佳答案

您不需要实现 CallBack 方法来在您的 SharedPreferences 中保存您已经更新了 Database

如果您真的需要一个数据库来存储您的信息,您可以简单地在 SharedPreferences 中创建一个名为 isDataExistToLoad 的标志

此标志最初必须是 False,并且在将您的信息存储到数据库中的 Thread 中将其设置为 True

public void updateUserStatus(ArrayList<Object> data){
try{
DBController.save(data);
SharedPReferencesController.setDataExistToLoad(true);
}catch(Exception e){
e.printStackTrace();
SharedPReferencesController.setDataExistToLoad(false);
}
}

每当您打开您的应用程序时,请检查此标志。如果它是 True 从数据库加载然后将其设置为 False。如果它是 False,请保持原样,因为之前的事务未成功完成。

My question is: is the AsyncTask guaranteed to finish and the callback to be called on an alive Activity reference before it gets destroyed? If not, how to ensure that data is written to database before Activity is destroyed?

我的答案是: AsyncTask 的一部分在一个单独的线程中运行,该线程是 DoInBackground,您无法确保 Activity 在完成之前仍然存在。如果您尝试在完成后台线程工作后在 UITread 上运行的 postExcute() 中执行任何其他任务。您的应用程序可能会崩溃。这就是为什么我不推荐这样做。

关于android - 在 Activity 被销毁之前安全地保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30296103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com