Activity、Service和线程应该是Android编程中最常见的几种类了,几乎大多数应用程序都会涉及到这几个类的编程,自然而然的,也就会涉及到三者之间的相互通信,本文就试图简单地介绍一下这三者通信的方式。
想写这篇文章的起因是,笔者跟几个同学在做一个Android上的应用,起初代码写得很凌乱,因为我在Activity中直接创建了线程,去执行某些任务。但是我们知道线程可能需要运行的时间比较长,而Android在内存不足的时候,会将一些Activity销毁,这样线程就会失去了管理的对象,从而使程序发生意想不到的结果。此外,在Activity中创建线程,线程跟Activity的通信也比较麻烦,一般借助Handler类来进行通信(http://blog.sina.com.cn/s/blog_3fe961ae0100mvc5.html)。
与Activity相比,Service一般“默默”地运行在后台,生命周期比较长,所以它更合适去为主程序提供某些服务,创建线程并管理线程。因此,笔者将原程序改成三层架构,从高到低分别为:Activity层--Service层--Thread层。Activity将需要的服务“告诉”Service层,Service层创建Thread去完成服务。Thread将任务的进度、状态、错误信息反馈给Service,Service将这些消息反馈给相关的Activity,并且还可以利用Notification更新通知栏消息。大体的结构就是这样。
1 Activity和Service之间的通信
1.1 利用Handler通信:http://blog.sina.com.cn/s/blog_3fe961ae0100mvc5.html
1.2 Activity调用startService (Intent service)方法,将消息添加到Intent对象中,这样Service对象可以在调用onStartCommand (Intent intent, int flags, int startId)的时候可以得到这些消息。这种方法很简单,但如果有大量的信息要传递的话,就很麻烦了。因为Service端还要判断一下消息是什么,才能作进一步的动作。
1.3 Activity调用bindService (Intent service, ServiceConnection conn, int flags)方法,得到Service对象的一个引用,这样Activity可以直接调用到Service中的方法。具体代码:
http://blog.csdn.net/liuhe688/article/details/6623924。
1.4 Service向Activity发送消息,除了可以利用Handler外,还可以使用广播,当然Activity要注册相应的接收器。比如Service要向多个Activity发送同样的消息的话,用这种方法就更好。具体方法可以看一下这篇文章:
http://blog.csdn.net/liuhe688/article/details/6641806。
2 Service跟Thread之间的通信
2.1 Service创建Thread后,如果要对线程进行控制(启动,暂停,停止等),那么Service中应该保留线程的引用,这不用多说。那么有了这个引用,Service就可以直接调用Thread的其它方法了。运行的线程要向Service发送消息的话,通常使用Handler就可以了:
http://blog.sina.com.cn/s/blog_3fe961ae0100mvc5.html。
3 Activity和Thread之间的通信
不用多想了,直接使用Handler吧。不推荐Activity直接去创建线程,因为不好管理线程。

转载于:https://www.cnblogs.com/laughingQing/p/4547794.html

Android中Activity、Service和线程之间的通信相关推荐

  1. android类之间的关系,Android 中Activity,Window和View之间的关系

    Activity是Android应用程序的载体,允许用户在其上创建一个用户界面,并提供用户处理事件的API,如 onKeyEvent, onTouchEvent等. 并维护应用程序的生命周期.Acti ...

  2. Android笔记(三十一)Android中线程之间的通信(三)子线程给主线程发送消息...

    先看简单示例:点击按钮,2s之后,TextView改变内容. package cn.lixyz.handlertest;import android.app.Activity; import andr ...

  3. 掌握Android中的进程和线程

    进程和线程是现代网络操作系统的核心概念.Android作为一种优秀的.承袭Linux的移动操作系统,其进程和线程的概念是开发者和安全工作人员需要深入了解的问题.本文将详细介绍Android中的进程.线 ...

  4. Android 中的 Service 全面总结(转)

    转自:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html# Android 中的 Service 全面总结 1.Service的种 ...

  5. Android中Activity启动模式详解

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...

  6. android 英语论文,Android中Activity的生命周期英语论文+译文.doc

    Android中Activity的生命周期英语论文译文 北方民族大学 英文文献翻译 论文题目: Android环境及Activity介绍 院(部)名 称: 计算机科学与工程学院 学 生 姓 名: 陈 ...

  7. 黑马程序员--线程之间的通信,等待与唤醒机制,线程的终止方式,线程中的其他方法,优先级,toString() 守护线程,GUI图形化界面

    ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...

  8. 【android】android中activity的生命周期

    activity生命周期: 实例代码: 1 public class DemoActivity extends Activity { 2 3 //1.activity第一次被创建的时候,执行 4 @O ...

  9. Android中Activity的四种启动方式

    谈到Activity的启动方式必须要说的是数据结构中的栈.栈是一种只能从一端进入存储数据的线性表,它以先进后出的原则存储数据,先进入的数据压入栈底,后进入的数据在栈顶.需要读取数据的时候就需要从顶部开 ...

最新文章

  1. ubuntu root用户没有声音(提示”正在等待声音系统响应”)
  2. python求平均成绩 输入用空格分隔的两个代码_在Python2.7中,如何计算以空格分隔的多个输入?...
  3. linux abs 和 屏幕 大小关系,观点|一个 Linux 菜鸟的回忆录
  4. pythondatetime_Date
  5. php的excel源码下载,PHPExcel-5 - 源码下载|Windows编程|其他小程序|源代码 - 源码中国...
  6. IDC 2019Q1云市场报告重磅出炉;英特尔与百度签署3年新协议;谷歌收购云存储公司 Elastifile,增强自家……...
  7. 包体 400 KB,首开 0.2 s,真有这样的播放器 SDK!
  8. java 方法注释格式_JAVA注释方法及格式
  9. 同样是写博客,为什么我男朋友的粉丝那么多?!
  10. 养肾=养命!这5个养肾方法,程序员都保存好了!
  11. 什么是Cat.1,Cat.1和4G之间的区别
  12. 波形发生器 -- 输出正弦波,三角波,矩形波,锯齿波,梯形波 -- DAC0832
  13. daily reading
  14. 国庆的人山人海,生无可恋脸
  15. 制定新的计划,走起(r13笔记第1天)
  16. HyperTech合泰集团介绍
  17. 小米手机连接青花瓷抓包(https)
  18. 用python画路飞代码_80行代码!用Python做一个哆来A梦分身
  19. 谈谈html中一些比较偏门的知识(maparea;iframe;label)
  20. # 阿里云服务器的运行与维护(1)

热门文章

  1. 机器学习中的算法:决策树模型组合之GBDT(Gradient Boost Decision Tree)
  2. 数据挖掘在电信欺诈侦测中的应用
  3. python nose框架_Python测试框架nose的介绍
  4. 手机qqsendencpac文件能删吗_无需任何app,手机电脑之前也能轻松传文件
  5. conda pip 安装NumPy速度不佳解决方案
  6. UART通讯协议(四)数据接收帧间隔
  7. PAT (Basic Level) Practice1001 害死人不偿命的(3n+1)猜想
  8. Hbase roekey设计入门
  9. Java配置分离之Spring远程配置
  10. Linux用户登录日志查询