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

Service 与 Thread 的区别

 
阅读更多
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

    service_thread.c

    深入剖析Android中Service和Thread区别

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

    android service thread toast handler

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

    测试Service中开启Thread

    在Android应用开发中,`Service` 是一个用于执行长时间运行操作的组件,它不提供用户界面,但可以与用户界面组件交互。`Service` 通常用于在后台执行任务,如播放音乐、网络通信等。然而,由于主线程(UI线程)主要...

    Andriod Service与Thread的区别介绍

    首先,我们需要明确Service是运行在主线程的,不能有耗时操作,这样,在Service中处理...但是Service就不同了,所有的Activity都可以与Service进行关联,然后可以很方便地操作其中的方法,即使Activity被销毁了,之后只

    Android_Service1

    在Android应用开发中,`Service` 是一个非常重要的组件,它允许应用程序在后台长时间运行,即使用户与应用程序的交互界面已经关闭。这篇博客"Android_Service1"深入探讨了`Service`的相关知识,以下是对这些知识点的...

    Android service详解

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

    android service的小实例

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

    android service toast 01

    这种方式适用于Service没有与特定Activity绑定的情况。 ```java // 在Service的onCreate()中 Handler mainHandler = new Handler(Looper.getMainLooper()); Runnable toastRunnable = new Runnable() { @Override ...

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

    本篇文章将详细讲解如何在Android中创建一个常驻Service,并结合BroadcastReceiver实现线程间(Service Thread与Activity)的异步通信。 一、创建Service 1. 定义Service类:首先,我们需要创建一个继承自`Service...

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

    7. **权限与生命周期管理**:记得在AndroidManifest.xml中声明Service,并根据需求处理Service的生命周期,例如在停止Service时,要确保清理掉Handler中的消息队列,防止不必要的更新。 这个ACDemo可能包含了一个...

    android 本地service

    由于主线程(UI线程)负责与用户交互,为了避免长时间运行的任务阻塞主线程,我们通常会在Service中创建新的线程来执行这些任务。这可以是通过创建`Thread`对象,使用`AsyncTask`,或者利用Android的`Handler`和`...

    android之service经典详解pdf

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

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

    在Android应用开发中,Service是四大组件之一,用于在后台执行长时间运行的操作,不与用户交互。本篇文章将深入探讨Service的手动重启、自动重启以及在特殊条件下的重启策略,帮助开发者更好地理解和管理Service的...

    Android知识点之Service篇.pdf

    1. Service与Thread的区别: Service运行在主线程中,不适宜执行耗时操作,而Thread是创建新线程的方式,能够在后台执行耗时任务,避免阻塞UI。但Thread无法直接更新UI,需借助Handler或runOnUiThread等机制与主线程...

    Android通过后台service下载

    如果需要与Service进行更紧密的交互,可以考虑使用绑定(Binding)。绑定允许Activity和Service之间建立连接,可以直接调用Service的方法。 **七、优化与注意事项** 1. 使用`IntentService`:如果下载任务是单线程...

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

    2. 后台任务:使用IntentService或者Background Thread来处理耗时任务,防止ANR(Application Not Responding)错误。 3. START_STICKY:在`onStartCommand()`中返回START_STICKY,当系统因资源不足杀死Service时,...

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

    在Android开发中,Service是一种非常重要的组件,它可以在后台长时间运行,执行一些不需要与用户交互的任务。本示例中,我们关注的是如何利用Service来实现资源的异步下载,并且在下载完成后对ZIP文件进行解压。这个...

Global site tag (gtag.js) - Google Analytics