一、           服务
1.         Android多线程

每一个Android应用程序都会分别运行在一个独立的Dalvik(或ART?)虚拟机中,而每个虚拟机在启动时会运行一个UI主线程。UI主线程执行的任务花费时间越短越好,耗时的工作应该交给子线程,以免阻塞主线程。

Android不允许在子线程中进行UI操作。

1)         异步消息处理机制

a)         核心思想:Message经过辗转调用后,从子线程进入主线程。

b)        四个组成部分:

u  Message:线程间传递消息,用字段携带信息。

u  Handler:发送和处理消息(sendMessage()和handleMessage())。发送出去的消息经过辗转处理后最终会传递到handleMessage()。

u  MessageQueue:消息队列,存放Handler发送的信息。每个线程只有一个MessageQueue。

u  Looper:管理MessageQueue。调用其loop()方法会进入无限循环,每当发现MessageQueue中有消息就将它取出来交给Handler的handleMessage()。

c)         使用步骤:

Step1:主线程创建Handler。

Step2:子线程创建Message,并通过Handler发送消息。(消息会被添加到消息队列,经过Looper处理最终发给Handler的handleMessage()。)

Step3:主线程执行Handler的handleMessage()。

2)         AsyncTask

泛型抽象类,基于异步消息处理机制的封装,方便在子线程进行UI操作。

a)         泛型参数:Params,Progerss,Result

b)        方法:

  • onPreExecute():后台任务执行前调用,可进行UI操作。

doInBackground(Params…):执行具体耗时任务,在子线程中运行,不可进行UI操作。可通过return返回任务执行结果。如果需要进行UI操作,可以调用publishProgress(Progress…)方法。

  • onProgressUpdate(Preogress…):当后台任务调用publishProgress(Progress…)方法后就很快调用该方法,可进行UI操作。
  • onPostExecute(Result):任务的收尾工作。当后台任务执行完毕通过return返回时调用,可进行UI操作。

2.  服务

1)         定义服务

继承Service类,重写

  • onCreate():服务第一次创建时调用。
  • onStartCommand():每次启动服务时调用。
  • onDestory():服务销毁时调用。

onBind():返回Binder()对象。

2)         启动和终止服务

借助Intent,使用Context类的startService()和stopService()。

3)         活动与服务进行通信

绑定活动和服务,在活动中调用服务的Binder提供的方法。

Step1:继承Binder类(可服务类中用内部类),创建专门的Binder对象,然后在服务的onBind()方法里返回这个实例。

Step2:继承ServiceConnection类并创建对象(可在活动中用内部类),重写onServiceConnected()和onServiceDisconnected()方法,它们分别在活动与服务绑定成功和连接断开时调用。在onServiceConnected()方法中加入对Binder对象的操作。

Step3:活动中构建Intent(显示,关联服务类),调用bindService(bindIntent, conncetion, BIND_AUTO_CREATE)方法。该方法第一个参数前面创建的Intent对象,第二个参数为Step2构建的ServiceConnection对象,第三个参数是一个标志位,BIND_AUTO_CREATE表示在活动和服务绑定后自动创建服务(执行onCreate(),不执行onStartCommand())。

二、           其他

查看类继承关系快捷键 Ctrl+H

Android学习_服务的更多相关文章

  1. Android学习笔记--服务(Service)

    1.服务概述 1.服务是Android四大组件之一,在使用上可以分为本地服务和远程服务,本地服务是指在不影响用户操作的情况下在后台默默的执行一个耗时操作,例如下载,音频播放等.远程服务是指可以供其他应 ...

  2. Android学习--探究服务(一)

    什么是服务? 服务(service)是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖任何的用户界面,即使应用被切换到后台或者 ...

  3. Android学习之服务初体验

    •概念 Service(服务)是一个长期运行在后台,没有用户界面的应用组件,即使切换到另一个应用程序或者后台,服务也可以正常运行: 因此,服务适合执行一些不需要显示界面的后台耗时操作,比如下载网络数据 ...

  4. Android学习--探究服务(二)

    服务的基本用法 定义服务: 我们需要先创建服务,我们要使用就的利用一个类去继承它,然后重写它的几个方法,具体的我们看下面的代码: 我们重写了下面三个方法: * onCreate()           ...

  5. Android学习_注意事项

    一. Fragment中加载ListView public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle ...

  6. Android学习_广播接收器

    一.广播 1. 标准广播和有序广播 标准广播:异步,发出消息,所有接收器同时接收.但无法被截断 有序广播:同步,同一时刻只有一个广播接收器接收.可截断消息. 2. 广播注册 代码中注册(动态注册).A ...

  7. Android学习_内容提示器

    内容提供器 1. 创建自己的内容提供器 1)         继承ContentProvider类,重写6个方法:onCreate().query().insert().update().delete ...

  8. Android学习_数据持久化

    数据持久化:将内存中的瞬时数据存储到设备中 1. 文件存储 存储一些简单的文本数据或二进制数据. 核心:Context类提供的openFileOutput()和openFileInput()方法,然后 ...

  9. 【转】 Pro Android学习笔记(八十):服务(5):访问远程服务

    目录(?)[-] Client的AIDL文件 Client的代码 建立连接 请求服务 断开连接 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://bl ...

随机推荐

  1. A Pythonic Card Deck: __len__ & __getitem__ & for 循环的嵌套

    1. 列表生成式的嵌套 for 循环: 示例如下: li1 = range(1,6) li2 = list("ABC") # list("ABC") 的结果为 ...

  2. day8 socket

    代码: 例子1:socket tcp 通讯 server端 import socketserver = socket.socket()ip_port = ("127.0.0.1", ...

  3. jdk中集成的jre和单独安装的jre有什么区别?

    jdk 和 jre 是什么? 有什么区别? jre Jre 是java runtime environment, 是java程序的运行环境.既然是运行,当然要包含jvm,也就是大家熟悉的虚拟机啦,还有 ...

  4. oracle解锁

    --以下几个为相关表SELECT * FROM v$lock;SELECT * FROM v$sqlarea;SELECT * FROM v$session;SELECT * FROM v$proce ...

  5. SQL Server 2005 实现数据库同步备份 过程--结果---分析

    数据库复制:   简单来说,数据库复制就是由两台服务器,主服务器和备份服务器,主服务器修改后,备份服务器自动修改. 复制的模式有两种:推送模式和请求模式,推送模式是主服务器修改后,自动发给备份服务器, ...

  6. GNU编译器:Codesourcery

    Codesourcery G++是个商业软件, 不过它有个lite版本,是完全免费的,只不过没有IDE,只有commmand line. Codesourcery G++支持coldfire, pow ...

  7. Kubernetes介绍与核心组件

    Kubernetes是什么? Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署.自动扩缩容.维护等功能. Kubernetes 特点 可移植: 支持公有云,私有云 ...

  8. 前端获取http和完整项目名

    <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+ ...

  9. kubernetes之requests和limits

    说明 1.当集群中的计算资源不很充足, 如果集群中的pod负载突然加大, 就会使某个node的资源严重不足, 为了避免系统挂掉, 该node会选择清理某些pod来释放资源, 此时每个pod都可能成为牺 ...

  10. three.js之创建坐标系网格

    <!DOCTYPE html> <html> <head> <meta charset=utf-8> <title>My first thr ...