回调是否发生在主(UI)线程上?

Eri*_*sen 16 android

有许多Android SDK API注册了回调处理程序.举一个具体的例子,使用MediaPlayer可以设置onCompletionListener回调.这些回调是否会从主(UI)线程调用?如果答案是"它取决于",那么我正在寻找一些关于从主线程与另一个线程调用回调的一般规则.SDK文档似乎没有拼写出来.(也许我错过了.)

知道这一点似乎很重要,因为如果我保证主线程回调,那么我可以跳过代码中不同位置之间共享的数据的一些线程同步.如果我因无知而被迫悲观,那么我必须编写额外的同步块代码并担心死锁,数据完整性和性能降低.

dnk*_*tso 19

如有疑问,可以使用Log.i("TAG", Thread.currentThread().getName());并查看:)

  • 为什么你期望这个实验的结果在未来的OS转速中可以重复?您是如何设计实验以引发可能在另一个线程上调用的情况?你需要多少结果才能开始认为这可以推广? (3认同)

Com*_*are 11

Android将在其他线程上调用您的代码的一种情况是,如果您创建通过AIDL公开的远程服务 - 将在绑定器线程上调用这些AIDL方法,而不是主应用程序线程.

但是,这是个例外.正如其他人所指出的那样,绝大多数都是在主应用程序线程上调用的.