• 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

  • 相关阅读:
    单例设计模式
    MySQL数据类型
    MySQL创建、修改、删除数据库
    HTTP请求与响应
    netcore在CentOS7 下使用处理图片的问题
    SQL删除重复数据
    不同浏览器对cookie大小与个数的限制
    asp.net实现SQL2005的通知数据缓存
    MS SQL 设置自增长字段默认值
    MS SQL 批量操作
  • 原文地址:https://www.cnblogs.com/pomodoro/p/11316152.html
Copyright © 2020-2023  润新知