Service和Thread的区别?

本文解析了Android中Service与Thread的区别及应用场景。Service作为系统组件,可在不同Activity间共享,实现跨Activity的消息服务;Thread则独立于Activity,适用于执行简单的异步操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

答:servie是系统的组件,它由系统进程托管(servicemanager);它们之间的通信类似于client和server,是一种轻量级的ipc通信,这种通信的载体是binder,它是在linux层交换信息的一种ipc。而thread是由本应用程序托管。

 

1). Thread:Thread是程序执行的最小单元,它是分配CPU的基本单位。可以用 Thread来执行一些异步的操作。

2). Service:Service是android的一种机制,当它运行的时候如果是Local Service,那么对应的 Service是运行在主进程的 main线程上的。如:onCreate,onStart这些函数在被系统调用的时候都是在主进程的 main线程上运行的。如果是Remote Service,那么对应的 Service则是运行在独立进程的 main线程上。

既然这样,那么我们为什么要用 Service 呢?其实这跟 android 的系统机制有关,我们先拿 Thread 来说。Thread 的运行是独立于 Activity 的,也就是说当一个 Activity被 finish之后,如果你没有主动停止 Thread 或者 Thread里的 run 方法没有执行完毕的话,Thread也会一直执行。因此这里会出现一个问题:当 Activity被 finish之后,你不再持有该 Thread 的引用。另一方面,你没有办法在不同的 Activity中对同一 Thread进行控制。

 

举个例子:如果你的 Thread 需要不停地隔一段时间就要连接服务器做某种同步的话,该 Thread需要在 Activity没有start的时候也在运行。这个时候当你 start一个 Activity就没有办法在该 Activity 里面控制之前创建的 Thread。因此你便需要创建并启动一个 Service,在 Service里面创建、运行并控制该 Thread,这样便解决了该问题(因为任何 Activity都可以控制同一 Service,而系统也只会创建一个对应 Service的实例)。

因此你可以把 Service 想象成一种消息服务,而你可以在任何有 Context的地方调用 Context.startService、Context.stopService、Context.bindService,Context.unbindService,来控制它,你也可以在 Service里注册 BroadcastReceiver,在其他地方通过发送 broadcast来控制它,当然这些都是 Thread做不到的。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值