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 做不到的。
7、在什么情况下使用 startService 或 bindService 或 同时使用startService 和 bindService
如果你只是想要启动一个后台服务长期进行某项任务那么使用 startService 便可以了。如果你想要与正在运行的 Service 取得联系,那么有两种方法,一种是使用 broadcast ,另外是使用 bindService ,前者的缺点是如果交流较为频繁,容易造成性能上的问题,并且 BroadcastReceiver 本身执行代码的时间是很短的(也许执行到一半,后面的代码便不会执行),而后者则没有这些问题,因此我们肯定选择使用 bindService(这个时候你便同时在使用 startService 和 bindService 了,这在 Activity 中更新 Service 的某些运行状态是相当有用的)。另外如果你的服务只是公开一个远程接口,供连接上的客服端(android 的 Service 是C/S架构)远程调用执行方法。这个时候你可以不让服务一开始就运行,而只用 bindService ,这样在第一次 bindService 的时候才会创建服务的实例运行它,这会节约很多系统资源,特别是如果你的服务是Remote Service,那么该效果会越明显(当然在 Service 创建的时候会花去一定时间,你应当注意到这点)。
8、在 AndroidManifest.xml 里 Service 元素的常见选项
android:name ------------- 服务类名
android:label -------------- 服务的名字,如果此项不设置,那么默认显示的服务名则为类名
android:icon -------------- 服务的图标
android:permission ------- 申明此服务的权限,这意味着只有提供了该权限的应用才能控制或连接此服务
android:process ---------- 表示该服务是否运行在另外一个进程,如果设置了此项,那么将会在包名后面加上这段字符串表示另一进程的名字
android:enabled ---------- 如果此项设置为 true,那么 Service 将会默认被系统启动,不设置默认此项为 false
android:exported --------- 表示该服务是否能够被其他应用程序所控制或连接,不设置默认此项为 false
分享到:
相关推荐
本文将深入探讨Android Service的特性和使用方式,帮助开发者更好地理解和运用这一核心组件。 #### Service概述 `Service`是一种在Android系统中运行于后台的服务程序,其主要特点是没有用户界面,这意味着它通常...
综上所述,理解并熟练运用Android Service进行本地服务操作,包括回调机制、后台线程的数据处理以及批量处理,是提升Android应用性能和用户体验的关键。开发者需要确保Service正确地管理其生命周期,避免内存泄漏,...
Service 和 Thread 在 Android 开发中都是处理后台任务的重要组件,但它们的作用和使用场景有着显著的区别。Service 是 Android 系统提供的一种机制,主要用于在后台长时间运行任务,而不需要直接与用户界面交互。...
### Android底层结构——Service线程详解 #### 一、引言 ...理解`Service`的工作原理和线程模型对于开发高质量的`Android`应用程序至关重要。希望本文提供的信息能帮助读者更好地理解和应用这些概念。
Android Service是Android平台中一个非常重要的概念,它是Android四大组件之一,主要用于执行长时间运行的操作,而不需要用户交互界面。Service在系统中以后台服务的方式运行,能够在应用界面不显示时继续执行操作,...
- **AndroidService**:指的是运行在System Server进程中的系统服务,例如Activity Manager Service、Package Manager Service等。这些服务为整个系统提供了关键功能,是构建在Dalvik VM之上的组件,通过JNI调用底层...
Java API和Android API是两种广泛使用的应用程序编程接口,它们各自为开发者提供了丰富的工具和功能,以便在不同的平台上创建软件。让我们深入探讨这两个API的关键概念、差异以及如何在实践中应用它们。 Java API,...
Service是Android应用程序设计中的核心组件之一,主要用于在后台执行长时间运行的任务,同时提供与其它组件交互的能力。...理解Service的生命周期和正确使用线程对于开发高效、稳定的Android应用至关重要。
-前台服务和后台服务:理解它们的区别,如何使用startService()和bindService()。 - Service生命周期:掌握onCreate(), onStartCommand(), onBind(), onUnbind(), onDestroy()等方法。 7. **广播Receiver**: -...
Android中的Service分为两种类型:标准Service和IntentService。标准Service需要手动管理和停止,而IntentService则会自动处理工作队列并在任务完成时自我销毁。 2. **服务的生命周期**: Service的生命周期由...
在Android开发中,Service是一种非常重要的组件,它可以在后台长时间运行,执行一些不需要与用户交互的任务。本示例中,我们关注的是如何利用Service来实现资源的异步下载,并且在下载完成后对ZIP文件进行解压。这个...
9. **异步处理**:AsyncTask、IntentService、Handler、Thread/Runnable以及现代的LiveData和Coroutines,都是处理耗时操作的方式,避免阻塞主线程。 10. **网络编程**:Android支持HTTP请求(如HttpURLConnection...
在Android开发中,`Service`、`Thread`、`Toast`和`Handler`是四个非常重要的组件和概念,它们在创建高效、响应式的应用程序中起着关键作用。下面将详细阐述这些知识点及其相互关系。 首先,`Service`是Android中的...
7. **异步处理**:Android中的AsyncTask、Handler、Looper、Thread和Runnable等机制用于处理非UI线程的任务,避免阻塞主线程。 8. **网络请求**:Retrofit、OkHttp等库用于发送HTTP请求,获取网络数据。同时,理解...
- **Service生命周期**:理解Service的启动方式和服务生命周期,包括startService()和bindService()的区别。 - **后台任务执行**:学习IntentService的使用,理解其在后台处理任务的特点。 5. **...
"android-app-master" 是一个开源项目,专门为Android开发者提供了一个很好的学习和参考实例。这个项目包含了一系列用于Android应用开发的示例代码,旨在帮助开发者掌握Android平台的各种功能和最佳实践。下面将详细...
- Android应用程序由多个组件构成,如Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)、ContentProvider(内容提供者)和Intent(意图)。这些组件之间通过Intent进行通信,构成Android应用的...
- Android应用中的Activity、Service、BroadcastReceiver和ContentProvider等组件间通信是应用功能实现的关键。例如,Activity可以通过Intent启动另一个Activity或Service,BroadcastReceiver监听系统或应用内的...
此外,该项目可能会涉及到Android的异步处理,如AsyncTask、Handler、Thread或更现代的LiveData和Coroutines。了解如何在Android应用中处理异步任务,以避免阻塞UI线程,是每个Android开发者必备的技能。 在数据...
2. 应用签名:每个Android应用必须签名才能安装,用于验证应用来源和完整性。 3. Google Play发布:官方应用市场,提供分发、更新和用户反馈等功能。 八、Android最新技术趋势 1. Jetpack:Google推出的新一代组件...