Service 与 Thread 的区别
很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下。
1). Thread:Thread 是程序执行的最小单元,它是分配CPU的基本单位。可以用 Thread 来执行一些异步的操作。
2). Service:Service 是android的一种机制,当它运行的时候如果是Local Service,那么对应的 Service 是运行在主进程的 main 线程上的。如:onCreate,onStart 这些函数在被系统调用的时候都是在主进程的 main 线程上运行的。如果是Remote Service,那么对应的 Service 则是运行在独立进程的 main 线程上。因此请不要把 Service 理解成线程,它跟线程半毛钱的关系都没有!
既然这样,那么我们为什么要用 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 做不到的。
分享到:
相关推荐
service_thread.c
下面小编就为大家带来一篇深入剖析Android中Service和Thread区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
首先,我们需要明确Service是运行在主线程的,不能有耗时操作,这样,在Service中处理...但是Service就不同了,所有的Activity都可以与Service进行关联,然后可以很方便地操作其中的方法,即使Activity被销毁了,之后只
Demo android组件Service与Toast 第二个版本
测试Service中开启线程修改Activity
Android创建Service后台常驻服务并使用Broadcast通信,即基于Broadcast通信方式实现了一种Service Thread与Activity异步工作的方法。
Demo android service toast 第一个版本
本地service回调/thread数据处理/批量处理数据
the main function of the service in a thread pool worker thread. You can easily extend the Windows Service skeleton to meet your own business requirement. /////////////////////////////////////////...
介绍Android Service的文档,用5个例程说明了Service的线程模型,并给出了Android平台上利用binder和service进行进程间通信的示例代码。
接下来将介绍Service的种类;Service与Thread的区别;Service的生命周期;startService 启动服务;Local与Remote服务绑定等等,感兴趣的朋友可以了解下
本例子练习使用Service以及控件的跨线程操作:主Activity界面用来启动、停止一个服务,该服务启动后会产生一个线程,该线程每隔一秒产生一个随机双精度数,并将该随机数显示在主Activity界面的一个TextView控件中。
Assigning one of those events creates a window in the context of the service thread. Creation of the service window can be forced by option eoForceServiceThreadWindow. Win XP SessionChange service ...
clientservice = new Thread(new ThreadStart(ServiceClient)); clientservice.Start(); } catch(Exception e) { Console.WriteLine(e.ToString()); } } }
由于银行后台核心系统普遍采用的是UNIX下C/C++的开发平台,如果需要调Web Service往往需要借助一些第三方的库,再加上第三方的加解密算法及包是由第三方提供的,如果直接在UNIX下开发项目成本会比较高,所以增加了一...
JMeter.plugins.functional.samplers.websocket.ServiceSocket.getResponseMessage(ServiceSocket.java:125) JMeter.plugins.functional.samplers.websocket.WebSocketSampler.sample(WebSocketSampler.java:156) ...
人工智能-项目实践-多线程-tonado的multi-thread 多线程封装 Quick Start 1.在“biz”目录中创建一个py文件,文件名任意但最好不要跟第三方库冲突 2.使用 "Router.route" 装饰器注册函数到路由表中,仿造示例即可 ...
我博客有相关的说明.就是service下载文件,然后通知.多线程相关的停止.