Android学习_服务
一、 服务
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学习_服务的更多相关文章
- Android学习笔记--服务(Service)
1.服务概述 1.服务是Android四大组件之一,在使用上可以分为本地服务和远程服务,本地服务是指在不影响用户操作的情况下在后台默默的执行一个耗时操作,例如下载,音频播放等.远程服务是指可以供其他应 ...
- Android学习--探究服务(一)
什么是服务? 服务(service)是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖任何的用户界面,即使应用被切换到后台或者 ...
- Android学习之服务初体验
•概念 Service(服务)是一个长期运行在后台,没有用户界面的应用组件,即使切换到另一个应用程序或者后台,服务也可以正常运行: 因此,服务适合执行一些不需要显示界面的后台耗时操作,比如下载网络数据 ...
- Android学习--探究服务(二)
服务的基本用法 定义服务: 我们需要先创建服务,我们要使用就的利用一个类去继承它,然后重写它的几个方法,具体的我们看下面的代码: 我们重写了下面三个方法: * onCreate() ...
- Android学习_注意事项
一. Fragment中加载ListView public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle ...
- Android学习_广播接收器
一.广播 1. 标准广播和有序广播 标准广播:异步,发出消息,所有接收器同时接收.但无法被截断 有序广播:同步,同一时刻只有一个广播接收器接收.可截断消息. 2. 广播注册 代码中注册(动态注册).A ...
- Android学习_内容提示器
内容提供器 1. 创建自己的内容提供器 1) 继承ContentProvider类,重写6个方法:onCreate().query().insert().update().delete ...
- Android学习_数据持久化
数据持久化:将内存中的瞬时数据存储到设备中 1. 文件存储 存储一些简单的文本数据或二进制数据. 核心:Context类提供的openFileOutput()和openFileInput()方法,然后 ...
- 【转】 Pro Android学习笔记(八十):服务(5):访问远程服务
目录(?)[-] Client的AIDL文件 Client的代码 建立连接 请求服务 断开连接 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://bl ...
随机推荐
- 解决windows系统下ping,ipconfig不是内部或外部命令
一般情况下,都是误删了系统变量path的值.解决方法:右击我的电脑 → 选择属性 → 选择高级系统设置 → 环境变量 → 在系统变量列表中,找到“path”环境变量双击,打开.在变量值这一栏检测下是否 ...
- Atcoder-SoundHound Inc.Contest 2018 -Masters Tournament-比赛报告
A C++ Example #include <iostream> #include <cstdio> #include <cstdlib> #include &l ...
- 设计模式及UML图
UML图 1. 依赖关系
- 深入理解hive(1)
1.安装和配置: 1.1可以通过这个下载链接去下载hive源码来安装一个一个稳定版本的hive.https://cwiki.apache.org/confluence/display/Hive/Get ...
- mockjs介绍
官网 https://github.com/nuysoft/Mock/wiki/Getting-Started 一.为什么使用mockjs 在做开发时,当后端的接口还未完成,前端为了不影响工作效率,手 ...
- box-sizeing
在大多数情况下我们在设置元素的 border 和 padding 并不希望改变元素的 width,height值,这个时候我们就可以为该元素设置 box-sizing:border-box;. 我不希 ...
- 电脑连手机调试app
小米6也真是坑,打开开发者模式的方式堪称一流绝密!!! 设置 --> 我的设备 --> 全部参数 --> MIUI版本 --> 连续点击七次,直到提示已经处于开发者模式为止 然 ...
- Gephi简单导入数据
使用工具 Gephi-0.9.2 事前要导入的数据 Node.csv 节点:名称可以所以定,格式.csv Edge.csv 边:名称可以所以定,格式.csv 导入操作 新建项目 导入节点 新建列要与表 ...
- Linux下的用户和用户组,文件权限:chown和chmod
如下图所示,root权限下新建一个用户MasterBai, /etc/passwd文件中新加入一些信息 这个文件中,记录了该服务器的用户信息,如下图红色框起来的用户,就是我们自己创建的用户,而起来2- ...
- 网络初级篇之VLAN(原理)
一.早期网络的问题 1.若某时刻有多个节点同时试图发送数据,极易产生冲突域,这样使得网络传输效率大大降低. 2.从一节点发送的数据都会被送到各个节点,极易形成广播域,这样会使得产生太多的广播流量而耗费 ...