Android学习-服务

作用:service实现程序后台运行的解决方案。适合执行不需要和用户交互并且需要长期运行的任务,即使程序被切换到后台,service仍能保持正常运行

注:服务不运行在一个独立的进程中,而是依赖于创建服务时所在的应用程序进程,当该应用程序被杀掉时,所有依赖于该进程的服务也会停止运行。

1 Android多线程编程

1.1 线程基本用法

常用Runnable接口定义线程

 使用匿名类实现:

 1.2 子线程中更新UI

1.3异步消息处理机

异步消息处理机制:Message    ,Handler,     MessageQueue,        Looper

Message:线程之间传递消息,携带少量信息

Handler:用于发送和处理消息,发送消息使用Handler的sendMessage()方法。处理消息使用handleMessage()方法。Message使用完后系统会调用recycle回收。

MessageQueue(消息队列):用于存放通过Handler发送的消息,每个线程只有一个消息队列。

Looper:管理每个线程的消息队列,调用Looper的loop()方法后,会进入无限循环中。每当发现消息队列中存在一条消息,会将他取出,传递到Handler的handleMessage()中。每个线程只用一个looper

 1.4使用AsyncTask

doInBackGround()方法执行具体的耗时工作

onProgressUpdate()方法执行UI操作

onPostExecute()方法执行任务收尾工作

启动任务:new DownloadTask().execute();

2 服务的基本用法

2.1定义服务

 

 onCreate():服务在第一次创建时调用

onStartCommand():每次启动服务时调用

onDestory(): 销毁时

startService():启动服务

stopService():停止服务

2.2 活动和服务进行通信

使用onBind()方法实现活动与服务之间通信

创建一个ServiceConnection匿名类,在里面重写onServiceConnected()方法和onServiceDisconnected() 方法,这两个方法用于在活动与服务成功绑定与解除绑定时调用,

3 服务的生命周期

1)content的startService():启动服务,

2)回调onStartCommand(),服务没创建,先onCreate(),再onStartCommand(),服务一直保持,直到stopService()或stopSelf()

3) 调用Context的bindService():获取服务持久连接,此时会回调服务中的onBind()方法。服务没创建,先onCreate()再onBind()。调用方获得onBind()方法返回的IBinder对象的实例

4 自动停止服务技巧---《第一行代码》10.5部分

IntentService类实现简单创建一个异步、会自动停止的服务

步骤:1)要提供一个无参构造函数,且在其内部调用父类的有参构造函数

2)在子类中实现onHandleIntent()这个抽象方法,此方法可以处理一些具体的逻辑,且不担心ANR问题,因为该方法已经是在子线程中运行。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值