`
wangshiming88
  • 浏览: 76595 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转android-Service和Thread的区别

阅读更多

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

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

2). ServiceService android的一种机制,当它运行的时候如果是Local Service,那么对应的 Service 是运行在主进程的 main 线程上的。如:onCreateonStart 这些函数在被系统调用的时候都是在主进程的 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.startServiceContext.stopServiceContext.bindServiceContext.unbindService,来控制它,你也可以在 Service 里注册 BroadcastReceiver,在其他地方通过发送 broadcast 来控制它,当然这些都是 Thread 做不到的。

分享到:
评论

相关推荐

    android 本地service

    本地service回调/thread数据处理/批量处理数据

    深入剖析Android中Service和Thread区别

    下面小编就为大家带来一篇深入剖析Android中Service和Thread区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Android底层结构-Service线程详解

    介绍Android Service的文档,用5个例程说明了Service的线程模型,并给出了Android平台上利用binder和service进行进程间通信的示例代码。

    android service thread toast handler

    Demo android组件Service与Toast 第二个版本

    Android-电池管理-实时获取电池电量,温度...等属性。

    实现一个电池属性实时监听器。这些属性包括温度,电池电量.......而且,使用Service,Broadcast,以及Thread的方式来实现。MyBatteryService后台获取Battery属性值,然后,在Activity中进行相关数据的显示。

    Android创建Service后台常驻服务并使用Broadcast通信

    Android创建Service后台常驻服务并使用Broadcast通信,即基于Broadcast通信方式实现了一种Service Thread与Activity异步工作的方法。

    android service toast 01

    Demo android service toast 第一个版本

    Andriod Service与Thread的区别介绍

    首先,我们需要明确Service是运行在主线程的,不能有耗时操作,这样,在Service中处理耗时操作的时候,我们依然需要使用线程来处理。 既然在Service里也要创建一个子线程,那为什么不直接在Activity里创建呢? 这是...

    测试Service中开启Thread

    测试Service中开启线程修改Activity

    深入理解Android:卷I--详细书签版

    第5章讲解了android系统中常用的类,包括sp、wp、refbase、thread等类,同步类,以及java中的handler类和 looper类,掌握这些类的知识后方能在后续的代码分析中做到游刃有余;第6章以mediaserver为切入点,对...

    Asynchronous Android Programming

    Construct scalable and performant applications to take advantage of multi-thread asynchronous techniques Explore the high-level Android asynchronous constructs available on the Android SDK Choose the ...

    Android应用8个后台服务小程序

    Android应用程序开发,8个后台服务相关Demo学习代码;适合刚开始学习Android的Service和Thread的新手

    Android官方api文档完整版+androidstudio快捷键

    Android官方API文档完整版, 内容参考: onBind public final IBinder onBind(Intent intent)从类 Service 复制的描述 Return the communication channel to the service. May return null if clients can not bind ...

    android9.0ble补丁蓝牙语音遥控器支持补丁.rar

    dev="sysfs" ino=16332 scontext=u:r:hal_audio_default:s0 tcontext=u:object_r:sysfs:s0 tclass=dir permissive=0 //Android 8.0和9.0版本,audio hal被android.hardware.audio@2.0-service进程加载 3、检查audio...

    Android锁屏无法继续定位问题

    Android锁屏无法继续定位问题 产生问题的原因: 手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会将手机进入休眠状态。... <service android:name=".MyIntentService"></service> 注册

    Android开发资料合集-World版!

    4.5.5、Context Menu和Options Menu菜单的区别 64 4.5.6、Context menus for expandable lists 64 4.6、LISTVIEW 66 4.6.1、ListView自定义分割线 66 4.6.2、LIST例一 66 4.6.3、LIST例二 76 4.6.4、LIST例三 80 ...

    Android开发艺术探索

    第11章 Android的线程和线程池 / 391 11.1 主线程和子线程 / 392 11.2 Android中的线程形态 / 392 11.2.1 Async Task / 392 11.2.2 Async Task的工作原理 / 395 11.2.3 Handler Thread / 402 11.2.4 ...

    Android实现定时任务及闹钟

    android中定时有很多种是实现,常见的Handler 与Thread的结合,handler.postDelayed ,以及要使用的AlarmManger 等都可以实现定时任务的执行,但是使用场景却大不相同,这里主要是怎么用AlarmManager实现定时任务。...

    《深入理解Android》卷Ⅰ

    6.2.5 秋风扫落叶-StartThread Pool和join Thread Pool分析 6.2.6 你彻底明白了吗 6.3 服务总管ServiceManager 6.3.1 ServiceManager的原理 6.3.2 服务的注册 6.3.3 ServiceManager存在的意义 6.4 ...

Global site tag (gtag.js) - Google Analytics