Binder 服务调用 和主线程的关系(1)

来源:互联网 发布:阿里云事业部组织架构 编辑:程序博客网 时间:2024/06/05 05:05

   1.Binder服务的调用对象和Binder服务处于同一进程
      在这种情况下,Binder 服务的调用对象调用服务方法的代码所在线程和 Binder服务执行所调用的方法的代码所在的线程,属于同一个线程。这个可以通过打印log 去验证。比如 应用程序A,的某个Activity在 AsyncTask 中访问 Binder 服务,这个Binder服务在应用程序A中的android.app.Service 中发布。在打印log 的时候你会发现 Binder 服务所执行的代码就处于 AsyncTask 的线程中。
       所以为了让你的工作线程不影响主线程,尽量避免你的工作线程和主线程共享同步锁,一旦共享同步锁,在你的工作线程(持有同步锁)没有执行完之前,如果主线程也想获得相同的同步锁,主线程就会被阻塞。主线程一旦被某个工作任务阻塞,其他的工作任务都无法执行,如果阻塞时间过长,还会造成应用程序的ANR.
1 0
原创粉丝点击