zoukankan      html  css  js  c++  java
  • Android Service

    1. Service组件一直在后台运行,没有用户界面,也需要再AndroidManifest.xml中配置Service,Android系统本身提供了大量Service组件,用于访问Android

    2. Service的生命周期:
      clipboard
    3. Service类中定义了一系列方法,如:
      • onBind:是必须实现的一个方法,返回一个绑定的接口IBinder,用于与Service通信
      • onCreate:当Service第一次被创建时由系统调用
      • onStartCommand:当通过startService方法启动Service时,该方法被调用
      • onDestroy:当Service被关闭之前,系统调用该方法.
      • onUnbind:当Service上绑定的所有客户端都断开连接时将回调该方法

    4. 若想使用Service必须在AndroidManif.xml配置文件中使用<service>元素声明该Service, 在其他组件中启动一个Service的方法有:
      • 使用Context.startService(Intent intent)方法,类似与启动一个Activity,用该方法启动的service访问者与该service没有联系,无法进行通信和数据访问,访问者退出了,service仍可以运行,当我们调用startService方法时,被调用的Service会调用它的onCreate方法,接着调用onStart方法,一旦Service启动将一直运行到调用Context.stopService()或者stopSelf()。
      • 另种调用Service的方法是通过bindService()来绑定一个Service,Service会调用onCreate方法来创建Service,但是它不会调用onStart,而是调用onBind返回一个IBinder接口,绑定Service一般用于远程Service调用,bindService(intent intent,ServiceConnection conn,Service.BIND_AUTO_CREATE)该方法启用service,并会执行Service.onBind方法,该方法会返回IBinder.访问者与service绑定在一起,访问者退出

    5. ServiceConnection对象:该对象的方法在主线程中运行,监听访问者与service的连接情况,创建该对象时要实现其onServiceConnected()和onServiceDisconnected(),当访问者与Service之间连接成功时会回调onServiceConnected,当Service的宿主进程由于异常或者其他原因终止,导致Service与访问者之间的连接断开会回调onServiceDisconnected方法,此时到Service的绑定仍然存在,Service再次启动时仍会触发onServiceConnected方法,但调用者主动通过unBindService方法断开与service的连接时onServiceDisconnected方法不会被调用.
      onBind返回的IBinder作为ServiceConnection.onServiceConnected的第二个参数用于与Service通信


    6. 当Activity调用bindService绑定一个已启动的Service时,系统只是把IBinder对象传给Activity.此时要销毁Service必须先调用unbindService和stopService两个方法

    7. Service中通常启动新线程处理后台任务,即使Activity被销毁也不会影响执行。Service运行在UI线程中,执行耗时操作也会抛ANR异常。另外Service系统优先级较低,当系统内存不足时有可能首先被回收,为了防止Service被系统kill,可以用 startForeground(id,notification)把service变为前台Service

    8. Android平台中各个组件运行在自己的进程中,进程间相互通信使用RPC,并且Android通过接口定义语言来生成两个进程之间相互访问的代码

    9. IntentService:使用队列管理Intent请求,有新Intent请求时,就会把Intent加入队列,启动一个新的worker线程来处理Intent,不会阻塞主线程,具有如下特性:
      • IntentService会创建单独的worker线程来运行onHandleIntent方法
      • 所有请求处理完成后IntentService会自动终止,开发者无需执行stopService
      • 为service的onstartCommand方法提供了默认实现,该实现将请求Intent加到队列中

           
  • 相关阅读:
    IP地址和进制转换
    Cisco交换机常见配置
    macOS上的autoreconf错误导致无法安装问题
    LG P5147 随机数生成器
    LG P1879 [USACO06NOV]Corn Fields G
    LG P5017 [NOIP2018]摆渡车
    mysql触发器trigger详解
    MybatisPuls中QueryWrapper的select、update的用法
    @Transactional各属性详解
    Linux如何查看进程、杀死进程、启动进程等常用命令(包括常用的命令,如查看文件,修改文件读写权限、寻找文件等)
  • 原文地址:https://www.cnblogs.com/phenixyu/p/3969145.html
Copyright © 2011-2022 走看看