我有一个应用程序,允许用户在一个特定的活动屏幕上输入大量数据。如果用户因任何原因突然离开此屏幕,我将他们的数据保存到应用程序的SQLite数据库。这款应用程序已经推出了近2年,从未遇到ANR超时,但在上个月我收到了市场上的2份报告。
在一种情况下,尝试关闭数据库时出现问题。在另一种情况下,尝试打开数据库时出现问题。我根本无法重现这个问题,但我看到了正在执行的步骤的确切顺序,但我的问题是我不知道我可能会改变什么。两者都围绕着为数据库保护互斥锁我自己不创建互斥锁,这是系统的事情。
基本上,onPause被调用,数据库被打开,我将数据写入文件,然后关闭数据库。据我所知,如果您的数据无法存储在SharedPreferences(我的数据不能存在)中,这是正确的做法。
我不明白为什么数据库的打开或关闭需要这么长时间,所以我的选择是什么?我唯一的假设是这些问题是由那些已经使用了很长时间的应用程序的用户引起的,因此他们的数据库文件变得非常大,并且可能使系统需要更长的时间来锁定数据库文件(我是只是在这里猜测。)
我想过可能从onPause启动AsyncTask,但这似乎不对。有什么建议吗?