【发布时间】:2012-06-16 18:54:27
【问题描述】:
我看到类似的问题,但答案各不相同,并不统一。
考虑一个 MediaPlayer 和一个注册的监听器(例如完成 播放或 onPrepared 等)。我测试了它,回调是 在与开始播放的线程相同的线程上执行。 由于我的应用是一个游戏,这个线程不是 UI 线程,它是 游戏的线程(顺便说一句,没有任何处理程序)。
是否可以保证何时调用它?我的游戏线程 一直在运行,所以我真的无法想象如何以及用什么 限制(如果有)我的回调被系统调用。我的游戏 线程一直在工作,因此必须在 操作中间(?) - 但后来我不明白。
【问题讨论】:
-
这是不可能的。如果回调代码的执行是“异步”发生的,那么回调一定是由另一个线程调用的。线程不能被调用,它们只能被发送信号。如果线程希望在信号上运行一些“回调”代码,它必须等待信号,例如。 Windows APC 调用 - 线程必须在其消息队列中等待以检索排队的回调,以便它可以使用自己的上下文执行它
-
检查 Android 源代码,MediaPlayer 似乎有一个循环器和一个关联的处理程序。 (这正是您所描述的实现,即消息队列。)但我不知道我的游戏线程何时处理消息,即它何时调用其中的 handleMessage (因为我没有明确地这样做,Android系统会这样做,但我想知道何时)。
标签: java android multithreading callback