当用户关闭我的应用时,我需要保存一些至关重要的数据。我倾向于在Activity
的{{1}}中执行此操作,因为它是在应用程序被销毁之前保证被调用的最新方法,无论其被破坏的原因是什么。但是,我将数据保存在数据库中,所以我使用onPause()
。从我的AsyncTask
开始,当我完成后,我在AsyncTask
引用上调用了一个回调方法,我之前保存在Activity
中,我将一些变量放到AsyncTask
表示数据已成功放入数据库。
我的问题是:是SharedPreferences
保证完成,并且在它被销毁之前在活AsyncTask
引用上调用回调?如果没有,如何确保在销毁Activity
之前将数据写入数据库?
答案 0 :(得分:1)
您不需要实施CallBack
方法来保存已更新SharedPreferences
的{{1}}。
您可以简单地说,如果您确实需要一个数据库来存储您的信息,请在Database
中创建一个名为 isDataExistToLoad 的标记
此标记最初必须为SharedPreferences
,并且在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
则保持原样,因为之前的交易未成功完成。
我的问题是:是保证完成的AsyncTask和回调 在被销毁之前被活动的Activity引用调用? 如果没有,如何确保在Activity之前将数据写入数据库 被毁了?
我的答案是: False
的一部分在一个单独的线程中运行,该线程是DoInBackground,您无法确保该活动在完成之前仍然存活。如果您尝试在完成后台线程工作后在{JITread上运行的AsyncTask
中执行任何其他任务。您的应用可能会崩溃。这就是我不推荐的原因。
答案 1 :(得分:1)
UIPopoverController
在后台与主线程并行执行。如果活动关闭,ASyncTask
仍然继续执行直到结束。并且它不需要将控制返回到主进程。
因此,您可以在关闭应用程序之前使用这种保存数据的方法。
我不确定在活动的ASyncTask
之后(即,当调用onPause
回调时),您可能能够使用onPause()
功能。因此,您应该在后台按钮或share-preference