Android-Service和Thread

学习自

郭霖的博客

服务是运行在主线程上的

可能在我们第一次接触到Service的时候都是对于 __服务是运行在主线程上的 __这一现象不太理解,但是事实上确实是如此。尽管Service是运行与后台的这个特性比较让我们误解。但是请不要将Service的后台和Thread弄混了,这两个没有任何的关系。Service的目的是,做一些持续性的操作,即使当所有的Activity都退出了,但是Service也不会被结束。Service 也是我们开发的APP程序的一部分,只不过Activity负责门面而Service负责在幕后工作,比如说发送心跳包,播放音乐等。

关于服务是运行在主线程上的我们可以通过打印Thread的ID来证明

//在Activity的onCreate方法中获取线程的ID
"Activity: Current thread id is ${Thread.currentThread().id}".logE()
//输出结果:Current thread id is 2
//在Service的onCreate方法中获取线程的ID
"Service: Current thread id is ${Thread.currentThread().id}".logE()
//输出结果:Service: Current thread id is 2

在服务中开启线程

因为Service是运行在主线程上的所以,当我们在Service执行一些操作的时候,我们往往需要开启线程来帮助我们完成。一个比较标准的服务可以写成下面这样:

class TestService : Service() {
private val mTestBinder = TestBinder() /**
* 返回Binder
* */
override fun onBind(intent: Intent?): IBinder {
return mTestBinder
} //在这里完成一些初始化操作
override fun onCreate() {
super.onCreate()
} override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
thread {
//do some thing
}
return super.onStartCommand(intent, flags, startId)
} //在这里回收资源
override fun onDestroy() {
super.onDestroy()
} inner class TestBinder : Binder() {
fun startDownload() {
thread {
//do some thing
}
}
}
}

或许你比较疑惑,既然使用了Service还得开启线程,那么为什么还要使用Service呢,直接在Activity中开启线程不就结了。原因是: 在Activity中的线程没有很好的可操作性,比如在Activity创建的时候开启了线程,如果Activity关闭了的话,那么我们再也没有办法拿到在关闭的Activity中开启的线程的实例了,这显然是很容易造成不可预料的后果的。而在Service则不一样,Service在任意的一个Activity中都可以随意的访问,如果通过了混合方式开启了Service的话,即使一个Activity解除了Bind,Service依然是存在的,仅仅是连接断开了。

Android-Service和Thread的更多相关文章

  1. Android Service和Thread的关系

    不少Android初学者都可能会有这样的疑惑,Service和Thread到底有什么关系呢?什么时候应该用Service,什么时候又应该用Thread?答案可能会有点让你吃惊,因为Service和Th ...

  2. Android Service与Thread的区别

    Android Service,后台,Android的后台就是指,它的运行是完全不依赖UI的.即使Activity被销毁,或者程序被关闭,只要进程还在,Service就可以继续运行.比如说一些应用程序 ...

  3. Android Service 与 Thread 的区别

    Ref:http://blog.csdn.net/jiangwei0910410003/article/details/17008687 1). Thread:Thread 是程序执行的最小单元,它是 ...

  4. Android - service and thread

    服务(Service)是Android中实现后台程序运行的方案.适合执行那些不需要和用户交互并长期执行的任务. 服务并非运行在一个独立的进程中,而是依赖于创建服务时所在的应用程序.当某个应用程序进程被 ...

  5. Android service与Thread

    很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下. 1). Thread:Thre ...

  6. Android 轮询之 Service + AlarmManager+Thread (转)

    android中涉及到将服务器中数据变化信息通知用户一般有两种办法,推送和轮询. 消息推送是服务端主动发消息给客户端,因为第一时间知道数据发生变化的是服务器自己,所以推送的优势是实时性高.但服务器主动 ...

  7. 【转】Android开发:Service和Thread的关系

    不少Android初学者都可能会有这样的疑惑,Service和Thread到底有什么关系呢?什么时候应该用Service,什么时候又应该用Thread?答案可能会有点让你吃惊,因为Service和Th ...

  8. android Service介绍

    一.简介 android中service(服务)运行于后台,没有界面.和其他组件一样,service也运行在主线程中,因此不能用它来做耗时的请求或者动作.可以在服务中开启线程,在线程中做耗时操作.可以 ...

  9. Android Service提高

    我们从以下几个方面来了解Service IntentService的使用 Service与Thread的区别 Service生命周期 前台服务 服务资源被系统以外回收处理办法 不被销毁的服务 Inte ...

  10. Android Service完全解析,关于服务你所需知道的一切(下)

    转载请注册出处:http://blog.csdn.net/guolin_blog/article/details/9797169 在上一篇文章中,我们学习了Android Service相关的许多重要 ...

随机推荐

  1. Redis记录-Redis命令

    Redis命令是用于在Redis服务器上执行一些操作.要在Redis服务器上运行命令,需要一个Redis客户端.Redis客户端在Redis包中有提供,这个包在我们前面的安装教程中就有安装过了. 语法 ...

  2. Struts2_day03

    一.上节回顾 1 在action获取表单提交数据 (1)使用ActionContext类获取 (2)使用ServletActionContext类获取 (3)接口注入 2 结果配置 (1)全局结果页面 ...

  3. ASP.NET MVC学习(五)之MVC原理解析

    ASP.NET MVC 请求生命周期 生命周期步骤概览 当我们对ASP.NET MVC网站发出一个请求的时候,会发生5个主要步骤: 步骤1:创建RouteTable 当ASP.NET应用程序第一次启动 ...

  4. [机器学习&数据挖掘]朴素贝叶斯数学原理

    1.准备: (1)先验概率:根据以往经验和分析得到的概率,也就是通常的概率,在全概率公式中表现是“由因求果”的果 (2)后验概率:指在得到“结果”的信息后重新修正的概率,通常为条件概率(但条件概率不全 ...

  5. Javascript中与Scroll有关的方法

    这块确实太乱了,被兼容搞的简直快要晕死,默默地总结下... 与scroll相关的方法 4个window对象下:scrollX.scrollY.scrollTo.scroll(作用和scrollTo一样 ...

  6. CF734F Anton and School (构造)

    \(solution\) : 这道题做法很巧妙,需要对位运算有足够了解: $( a $ & $ b )$ \(+\) $( a $ | $ b )$ \(=\) \(a+b\) ,所以有 \( ...

  7. Python网络通信 (一)

    ISO(国际标准化组织)--->网络体系结构标准 OSI模型 OSI 七层模型 应用层 :提供用户服务,具体内容由特定程序规定 表示层 :提供数据的压缩解压和加密等 会话层 :建立程序级的连接, ...

  8. sublime text 3 开启卡顿(win7)解决办法

    启动sublime3,ctrl+~打开命令窗口,输入以下 { "update<em>check": false, "font</em>size&q ...

  9. MySQL的Auto-Failover功能

    今天来体验一下MySQL的Auto-Failover功能,这里用到一个工具MySQL Utilities,它的功能很强大.此工具提供如下功能:(1)管理工具 (克隆.复制.比较.差异.导出.导入)(2 ...

  10. 解决依赖的moduleBuildConfig.DEBUG总是未false的问题

    Android 开发中一般会通过 BuildConfig.DEBUG 判断是否是 Debug 模式,从而做一些在 Debug 模式才开启的特殊操作,比如打印日志.这样好处是不用在发布前去主动修改,因为 ...