- 浏览: 120805 次
- 性别:
- 来自: 广州
文章分类
最新评论
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 做不到的。
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 做不到的。
发表评论
-
stopSelf()与stopSelf(startId)的区别
2016-04-14 14:44 1109startId:表示启动服务的次数 stopSelf(sta ... -
安装/卸载/替换成功广播接收
2016-01-08 11:59 793<receiver android:name=" ... -
ContentProivder
2015-12-09 09:26 488ContentProvider 我们实现了其中的几个方法 ... -
Android获取网络时间
2015-11-19 11:27 11821、实时获取: LocationManager locatio ... -
android animation知识
2015-11-14 11:47 575<?xml version="1.0" ... -
代码中设置android:drawableTop等
2015-11-14 10:42 1017btnAttachment.setCompoundDrawab ... -
自定义View
2015-11-04 15:09 404一般来说,自定义View都会去重写onMeasure()方法, ... -
SimpleOnGestureListener
2015-11-04 12:03 546onScroll()缓慢滑动,手指滑动屏幕的过程中执行; on ... -
设置dialog在底部并宽度全屏显示
2015-11-02 11:53 2290pickerDialog.setContentView(vie ... -
横竖屏切换使用 android:configChanges="orientation|keyboardHidden"无效
2015-10-29 10:51 1790在之前的版本中都是在Manifest文件中设置Activity ... -
Dialog注意点
2015-10-28 17:14 516dialog:setCancelable与setCancele ... -
清除setBackgroundResource的原有值
2015-10-23 16:50 1163setBackgroundResource(0);清除原有的s ... -
接收隐式意图
2015-10-22 11:29 545想接收隐式意图,必须在他们的意图过滤器中配有:android. ... -
严苛模式
2015-10-14 20:25 1375//启用严苛模式,StrictMode可以用于捕捉发生在应用程 ... -
Android使用Animation完成动画保留最后一帧的办法
2015-09-08 10:43 2426在动画效果的xml中,在set标签中加上一条android:f ... -
控件getHeight和getWidth等于0的解决办法
2015-09-07 17:27 1426//监听layoutContainer是否初始化完成 l ... -
避免内存泄露
2015-08-18 19:21 4861、尽量避免在Activity使用static。 2、能使用A ... -
需要context的时候用activity还是application?
2015-08-17 17:02 755需要context的时候用activity还是applicat ... -
谈谈UI中, Padding和Margin有什么区别?
2015-08-10 17:18 1101Padding 文字对边框, margin是控件与控件之间的距 ... -
android服务(Service)
2015-08-10 17:12 668在Service的生命周期中, ...
相关推荐
Service 和 Thread 在 Android 开发中都是处理后台任务的重要组件,但它们的作用和使用场景有着显著的区别。Service 是 Android 系统提供的一种机制,主要用于在后台长时间运行任务,而不需要直接与用户界面交互。...
service_thread.c
在Android开发中,`Service`、`Thread`、`Toast`和`Handler`是四个非常重要的组件和概念,它们在创建高效、响应式的应用程序中起着关键作用。下面将详细阐述这些知识点及其相互关系。 首先,`Service`是Android中的...
标题"测试Service中开启Thread"意味着我们要探讨如何在`Service` 中创建并管理线程,以便在不影响用户体验的情况下执行后台任务。描述中的“测试Service中开启线程修改Activity”则表明我们不仅要在`Service` 中启动...
首先,我们需要明确Service是运行在主线程的,不能有耗时操作,这样,在Service中处理耗时操作的时候,我们依然需要使用线程来处理。 既然在Service里也要创建一个子线程,那为什么不直接在Activity里创建呢? 这是...
- "Service和Thread的关系.png"可能是一张图解,清楚地展示了Service如何在不同线程中运行。 - "服务的生命周期.png"可能是Service生命周期各个阶段的可视化表示。 - "Serviced的种类.png"可能区分了标准Service...
Service与Thread的区别在于,Thread是程序执行的基本单元,而Service是Android系统的一个组件。Thread在单独的线程中执行,不受Activity生命周期的影响,但当Activity被销毁时,若未正确管理Thread,可能导致内存...
开发者可以通过阅读和分析这些代码来学习如何在Service中正确地使用Toast,同时理解多线程和UI更新的规则。 此外,了解如何调试和跟踪Service中的问题也是很重要的。Android Studio提供了强大的工具,如Logcat,...
我们可以在Service的onStartCommand()或onBind()方法中创建新的线程,如使用Handler、AsyncTask或者Thread/Runnable。这样可以确保Service的后台任务不会影响到用户界面的响应速度。 4. AIDL方式的Service AIDL...
在“android service反馈到主线程更新界面”这个主题中,我们主要探讨的是如何利用Service和Handler机制,实现在后台服务中执行任务,并将结果实时反馈到主线程以更新UI。 首先,Service的基本概念是:它是一个没有...
在Android应用开发中,Service是实现后台长时间运行任务的关键组件,而BroadcastReceiver则是系统和应用之间进行事件传递的重要桥梁。本篇文章将详细讲解如何在Android中创建一个常驻Service,并结合...
这可以是通过创建`Thread`对象,使用`AsyncTask`,或者利用Android的`Handler`和`Looper`机制,以及`IntentService`(它默认在单个工作线程中执行任务)。 批量处理数据通常涉及到数据库操作或者网络请求。在...
Service运行在主线程上,如果在Service中进行耗时的后台操作,需要使用线程(Thread)或者HandlerThread。而在多线程编程中,直接更新UI组件可能会导致线程安全问题。因此,需要正确使用Handler来在其他线程(比如...
- 创建Service需要继承`Service`类,并重写其中的关键方法,如`onStartCommand()`和`onDestroy()`。 - 在UI线程中启动Service,通常通过调用`startService()`或`bindService()`方法。 - 为了不影响用户体验,...
本话题将深入探讨如何在Android Studio中创建和管理Service,使其在应用退出后仍能继续运行,并实现开机自启动,以保持应用的后台存活。 一、Service基础 1. 创建Service: 在Android Studio中,可以通过右键项目 -...
本篇文章将深入探讨Service的手动重启、自动重启以及在特殊条件下的重启策略,帮助开发者更好地理解和管理Service的生命周期。 一、Service的生命周期 在理解Service的重启之前,我们需要先了解其基本生命周期。...
Service是Android系统中的一个重要组件,它是后台运行的程序,不提供用户界面,主要用于执行长时间运行的任务,例如...正确使用Service,不仅可以提升用户体验,还能有效管理应用的后台行为,确保应用的稳定性和效率。
1. **配置GPRS模块**:首先,需要在硬件层面连接GPRS模块到MCU,并确保RT-thread系统能够正确识别和控制该模块。这通常涉及到串行通信接口(如UART)的设置,以及AT命令集的使用来配置GPRS连接,如SIM卡的插入、网络...