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 ...
随机推荐
- List 集合 一行4个排序
List<string> list = new List<string>(); ; i < ; i++) { list.Add(i.ToString()); } int ...
- java中的接口和php的接口的区别
php: 规范: 接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量. 在接口中的抽象方法只能是public的,默认也是public权限. abstract和final修饰符也不能修饰接口中 ...
- Unable to load the specified metadata resource
本地运行都正常,就是发布到服务器上不行,查找了一些文章,都没解决我的问题,后来发现是路径不对和文件缺失. 原来的配置文件中是这样的: <add name="TRidentityEnti ...
- Func<>委托、扩展方法、yield、linq ForEach综合运用
1.先定义一个Model类 public class P1 { public string name { get; set; } public int age ...
- JS基础_流程控制语句
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Pytorch中randn和rand函数的用法
Pytorch中randn和rand函数的用法 randn torch.randn(*sizes, out=None) → Tensor 返回一个包含了从标准正态分布中抽取的一组随机数的张量 size ...
- bus事件总线传值
import Vue from 'vue' var bus = new Vue() export default bus 监听事件: // header组件 <template> ...
- GitLab端口冲突 解决办法
访问gitlab,出现:502 GitLab在使用的过程中,会开启80端口,如果80端口被其他的应用程序占用,则GitLab的该项服务不能使用,所以访问GitLab会失败.大多数皆是此问题. ...
- MySQL连表查询练习题
1.建库 库名:linux50 字符集:utf8 校验规则:utf8_general_ci  create database linux4 charset utf8 default collate ...
- 网络基础篇之HDLC、PPP(原理)
一.广域网传输 之前讲解的都是关于局域网的数据传输,这次讲解的是广域网的传输. 广域网简称WAN,是一种跨越超大的.地域性的计算机网络集合.通常跨省.市.甚至一个国家.广域网包括很多子网,子网可以是局 ...