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

原文地址:https://www.cnblogs.com/pomodoro/p/11316152.html