`

Service和Thread的区别?

 
阅读更多
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 做不到的。
分享到:
评论

相关推荐

    深入剖析Android中Service和Thread区别

    Service 和 Thread 在 Android 开发中都是处理后台任务的重要组件,但它们的作用和使用场景有着显著的区别。Service 是 Android 系统提供的一种机制,主要用于在后台长时间运行任务,而不需要直接与用户界面交互。...

    service_thread.c

    service_thread.c

    android service thread toast handler

    在Android开发中,`Service`、`Thread`、`Toast`和`Handler`是四个非常重要的组件和概念,它们在创建高效、响应式的应用程序中起着关键作用。下面将详细阐述这些知识点及其相互关系。 首先,`Service`是Android中的...

    测试Service中开启Thread

    标题"测试Service中开启Thread"意味着我们要探讨如何在`Service` 中创建并管理线程,以便在不影响用户体验的情况下执行后台任务。描述中的“测试Service中开启线程修改Activity”则表明我们不仅要在`Service` 中启动...

    Andriod Service与Thread的区别介绍

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

    Android_Service1

    - "Service和Thread的关系.png"可能是一张图解,清楚地展示了Service如何在不同线程中运行。 - "服务的生命周期.png"可能是Service生命周期各个阶段的可视化表示。 - "Serviced的种类.png"可能区分了标准Service...

    Android service详解

    Service与Thread的区别在于,Thread是程序执行的基本单元,而Service是Android系统的一个组件。Thread在单独的线程中执行,不受Activity生命周期的影响,但当Activity被销毁时,若未正确管理Thread,可能导致内存...

    android service toast 01

    开发者可以通过阅读和分析这些代码来学习如何在Service中正确地使用Toast,同时理解多线程和UI更新的规则。 此外,了解如何调试和跟踪Service中的问题也是很重要的。Android Studio提供了强大的工具,如Logcat,...

    android service的小实例

    我们可以在Service的onStartCommand()或onBind()方法中创建新的线程,如使用Handler、AsyncTask或者Thread/Runnable。这样可以确保Service的后台任务不会影响到用户界面的响应速度。 4. AIDL方式的Service AIDL...

    android service反馈到主线程更新界面

    在“android service反馈到主线程更新界面”这个主题中,我们主要探讨的是如何利用Service和Handler机制,实现在后台服务中执行任务,并将结果实时反馈到主线程以更新UI。 首先,Service的基本概念是:它是一个没有...

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

    在Android应用开发中,Service是实现后台长时间运行任务的关键组件,而BroadcastReceiver则是系统和应用之间进行事件传递的重要桥梁。本篇文章将详细讲解如何在Android中创建一个常驻Service,并结合...

    android 本地service

    这可以是通过创建`Thread`对象,使用`AsyncTask`,或者利用Android的`Handler`和`Looper`机制,以及`IntentService`(它默认在单个工作线程中执行任务)。 批量处理数据通常涉及到数据库操作或者网络请求。在...

    android之service经典详解pdf

    Service运行在主线程上,如果在Service中进行耗时的后台操作,需要使用线程(Thread)或者HandlerThread。而在多线程编程中,直接更新UI组件可能会导致线程安全问题。因此,需要正确使用Handler来在其他线程(比如...

    android service下载资源,同时解压资源

    - 创建Service需要继承`Service`类,并重写其中的关键方法,如`onStartCommand()`和`onDestroy()`。 - 在UI线程中启动Service,通常通过调用`startService()`或`bindService()`方法。 - 为了不影响用户体验,...

    【Android studio】service在app直接退出下,整体输出情况,实现开机自启动,一直后台运行

    本话题将深入探讨如何在Android Studio中创建和管理Service,使其在应用退出后仍能继续运行,并实现开机自启动,以保持应用的后台存活。 一、Service基础 1. 创建Service: 在Android Studio中,可以通过右键项目 -...

    Android中Service的手动、自动以及特殊条件下的重启

    本篇文章将深入探讨Service的手动重启、自动重启以及在特殊条件下的重启策略,帮助开发者更好地理解和管理Service的生命周期。 一、Service的生命周期 在理解Service的重启之前,我们需要先了解其基本生命周期。...

    Android部分之Service篇.zip

    Service是Android系统中的一个重要组件,它是后台运行的程序,不提供用户界面,主要用于执行长时间运行的任务,例如...正确使用Service,不仅可以提升用户体验,还能有效管理应用的后台行为,确保应用的稳定性和效率。

    RT-thread系统GPRS远程升级

    1. **配置GPRS模块**:首先,需要在硬件层面连接GPRS模块到MCU,并确保RT-thread系统能够正确识别和控制该模块。这通常涉及到串行通信接口(如UART)的设置,以及AT命令集的使用来配置GPRS连接,如SIM卡的插入、网络...

Global site tag (gtag.js) - Google Analytics