Android蓝牙聊天示例 - 同步onPause()函数

3

我刚开始学习Android开发。我有相当不错的Java经验,包括线程。我一直在研究BluetoothChat示例,并且困惑的是发现onPause()和onResume()方法被同步了。因为这两个方法只在UI线程上执行,所以我不明白为什么需要同步。

2个回答

0

仅因为onPause()只在主线程上运行,并不意味着其他线程不能同时运行。这只是确保安全的线程,以防另一个线程正在运行并希望访问onPause()将要使用/修改的变量。

在我看来,唯一防止的是如果有人试图在完全初始化之前完成活动(即完成调用onResume())。我猜想它会防止您或任何其他线程在其达到运行状态之前完成该活动。

还请参见问题


我理解你的意思,但我不认为那是正确的。同步方法可以防止在特定实例上同时调用多个同步方法。onPause()和onResume()是Activity中唯一的同步方法,并且它们永远不会并行调用,因为它们在同一个线程上。对象上的非同步方法可能会被调用并修改在同步方法中使用的字段(通常来说这不是一个好主意)。 - SteveR
虽然,我认为这已经是活动生命周期的工作方式。 - Joel
到目前为止,我所见的没有任何迹象表明这两种方法之间会有争用,尽管我同意这可能是解决这种情况的一种方式。感谢您提供另一个问题的链接...至少我不是孤单的!(在发布之前我进行了搜索,但没有找到那个问题)。 - SteveR

0

Android开发者文档中关于进程和线程的部分很好地解释了应用程序生命周期的工作原理以及线程的作用。


我之前看过那个文档,但是现在重新理解Android这个领域还是很有用的...然而,我没有看到任何有助于回答我的问题的内容。 - SteveR
我原以为它们是同步的,因为应用程序生命周期的工作方式。onPause和onResume不能同时调用。 - Rarw
你是在暗示同步被用来强制执行吗?我没有看到任何证据表明这是必要的。我的理解是系统不会同时调用onPause和onResume... Joel给出的链接表明其他人也有和我一样的问题。 - SteveR
这正是我所建议的,尽管你说得对,我也找不到任何具体解决这个问题的东西。这是一个好问题。然而,在所有的Android文档中似乎都没有涉及到它。 - Rarw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接