Android 系统服务会开多个线程来执行服务

一直有个疑问,即多个apk 同时调用同一个系统服务中的同一个接口时,会不会发生阻塞? (实际上之前看过这方面的内容,知道不会,但自己从来没亲自验证过,这次就来个了结)

今天自己在系统中添加了系统服务,然后让多个apk 来调用。

 Android 中自定义了系统服务,添加了一个接口,接口中延迟了20s来观察是否阻塞

    public void testTwo(String key)  {
        Slog.d(TAG,"phg__  testTwo key " + key);
        try {
            Thread.sleep(20000);  // 延迟 20s
        } catch (Exception e){
            Slog.d(TAG,"phg__ testTwo err ");
        }
        Slog.d(TAG,"phg__ testTwo ");
    }

通过log 看,两个apk,分别调用 testTwo 函数,android 系统会启动两个线程来执行各自任务,不会出现 一个apk执行完,另一个apk 才执行的情况。

    行 1351: 08-04 16:10:57.648  1178  2648 D QueryList: phg__  testTwo key two
    行 2692: 08-04 16:11:00.505  1178  2154 D QueryList: phg__  testTwo key two
    行 5228: 08-04 16:11:17.648  1178  2648 D QueryList: phg__ testTwo 
    行 6735: 08-04 16:11:20.505  1178  2154 D QueryList: phg__ testTwo 

这是由于binder 机制决定的,binder有一个线程池,当接受的binder 调用后,会开启一个线程来执行该任务,不会出现一个线程一直运行着的情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值