2011-06-10 59 views
2

我有两项活动。在活动1中,我通过将该值输入到EditText字段中来为SQLite数据库写入值。一旦我按下提交按钮,数据就会被写入,并且我将被移动到另一个活动 - 活动2. Activity2也会执行相同的操作,因为我可以使用按钮单击来写入新数据并将其保存到数据库中。所以,我的问题是:是否需要同步活动1中的方法(位于UI中的独立线程上)以及活动2中的方法,以防止数据库中的线程安全问题?请记住,这两种方法都可以访问相同的数据库,但可以从不同的活动中访从技术上讲,活动1应该完成,onStop已被调用,新活动(活动2)现在可见。这两个活动及其相应的线程是否有可能(通过不同的方法)访问数据库在Android活动生命周期中存在任何种类的并发问题?Android活动中的同步方法

非常感谢, 马特

回答

1

检查这种方法

SQLiteDatabase.setLockingEnabled(boolean lockingEnabled)

+0

感谢您 - 我不知道这种方法。然而,问题仍然存在 - 鉴于Android活动的生命周期,我需要它吗? – 2011-06-10 13:15:50

+0

[The method](http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#setLockingEnabled(boolean))已弃用 – JesperB 2012-09-12 10:57:41

+0

您提到自哪个版本被删除了吗? – 2012-09-12 18:14:29

0

你的后台线程如何创建的?后台线程会在活动停止后继续运行。

如果活动2中的数据在用户输入一些数据之前不会持久化,那么考虑到活动1中的数据应持续几毫秒的事实,似乎不需要锁定。但是,如果你正在准备最糟糕的情况,我不知道数据库锁怎么会伤害任何东西(就像@Pepi建议的那样)。我可以看到这是一个问题的唯一方法是,如果在后台线程(活动1)中完成的工作挂在某个东西上,然后它可以提交数据。如果活动2启动它自己的后台工作来提交数据,那么你可能会在这两个后台线程之间进行竞争。

+0

这是我的想法,更糟糕的情况似乎是唯一的警告。根据活动,我使用处理程序创建线程,或使用扩展线程的简单内部类来创建线程。这取决于。所以我想这会让他们保持同步,尽管在理论上它似乎不应该有99.99%的时间 - 如果有的话。而且,这些过程的持续时间相当短 - 没有什么重大的,所以它应该没问题。谢谢。 – 2011-06-10 13:58:50

+0

@javamatt您应该将我们的答案标记为“正确”,以便将此问题归类为回答。 – 2011-06-10 15:16:27