【问题标题】:synchronized methods in Android ActivitiesAndroid Activity 中的同步方法
【发布时间】:2011-06-10 12:44:21
【问题描述】:

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

非常感谢, 马特

【问题讨论】:

    标签: android android-activity synchronization thread-safety


    【解决方案1】:

    检查这个方法

    SQLiteDatabase.setLockingEnabled(boolean lockingEnabled)

    【讨论】:

    • 谢谢你 - 我不知道这个方法。但是,问题仍然存在 - 考虑到 Android 活动的生命周期,我是否需要它?
    • The method 已弃用
    • 你有没有提到从哪个版本被贬低?
    【解决方案2】:

    您的后台线程是如何创建的?即使在活动停止后,后台线程仍将继续运行。

    如果 Activity 2 中的数据在用户输入一些数据之前不会被持久化,那么考虑到来自 Activity 1 的数据应该在几毫秒内持久化,似乎不需要锁定。

    但是,如果您正在为最坏的情况做准备,我看不出数据库锁会如何伤害任何东西(正如@Pepi 所建议的那样)。我可以看到这是一个问题的唯一方法是,如果在后台线程(活动 1)中完成的工作在提交数据之前挂在某个东西上。如果活动 2 启动它自己的后台工作程序来提交数据,那么您可能会在这两个后台线程之间发生竞争。

    【讨论】:

    • 这正是我的想法,更糟糕的情况似乎是唯一的警告。根据活动,我正在使用处理程序或使用扩展 Thread 的简单内部类创建线程。这取决于。所以我想这只会让它们保持同步,即使理论上看起来在 99.99% 的时间里它都不应该是必要的——如果有的话。此外,这些过程的持续时间很短 - 没什么大不了的,所以应该没问题。谢谢。
    • @javamatt 您应该将我们的答案之一标记为“正确”,以便将此问题归类为已回答。
    猜你喜欢
    • 2016-08-29
    • 2019-03-15
    • 1970-01-01
    • 2015-02-27
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多