Android Service初步学习的笔记

1.Service的应用场景

  条件:a.并不依赖于用户可视化界面(不是绝对的,如前台service就是与notification界面结合使用的)

       b.具有较长时间的运行特性。

  service的应用场景有很多,如:

  • 当用户离开音乐应用时,Music playback以Service运行;
  • 当后台文件正在下载时它以Service实现;
  • Google应用维持一个Service来从网络中获取推送服务;
  • 当一些特殊的数据同步需要进行时,Sync adapters以Service运行于后台;
  • 活动壁纸以Service运行于后台;

2.service的基本用法

  a.启动的两种方式

  • 通过startService启动
  • 通过bindService启动

  两种启动方式的区别

  • 通过startService启动的,就跟Activity无关了,在其它地方也可以关闭
  • 通过bindService启动的,是和Activity绑定的,Activity挂了,它就挂了

  b.生命周期

  

service积极活动的生命时间(active lifetime)是从onStartCommand() onBind()被调用开始,它们各自处理由startService()或 bindService()方法传过来的Intent对象。

  如果service是被开启的,那么它的活动生命周期和整个生命周期一同结束。

  如果service是被绑定的,它们它的活动生命周期是在onUnbind()方法返回后结束。

  注意:尽管一个被开启的service是通过调用 stopSelf() 或 stopService()来停止的,没有一个对应的回调函数与之对应,即没有onStop()回调方法。所以,当调用了停止的方法,除非这个service和客户组件绑定,否则系统将会直接销毁它,onDestory()方法会被调用,并且是这个时候唯一会被调用的回调方法。

  c.创建了几个实例?

  不管调用多少次都只有1个实例,因为只走了一个oncreate方法。

  在启动(startService)的时候不要忘了在某一个给他停止(StopService)

  同样在绑定(bindService)的时候,也要在后面给他解绑(onUnbind)

3.Service跟Activity通信

  通信方式

  • 继承Binder类

    这个方式只有当你的Acitivity和Service处于同一个Application和进程时,才可以用,比如你后台有一个播放背景音乐的Service,这时就可以用这种方式来进行通信。在Service里定义一个内部类,Binder的子类,通过这个类,把Service的对象传给Activity,这样Activity就可以调用Service里的公用方法和公用属性了,但这种方式,一定要在同一个进程和同一个Application里。

  • 使用Messenger

    上面的方法只能在同一个进程里才能用,如果要与另外一个进程的Service进行通信,则可以用Messenger。

    其实实现IPC的方式,还有AIDL,但推荐使用Messenger,有两点好处:

    1. 使用Messenger方式比使用AIDL的方式,实现起来要简单很多

    2. 使用Messenger时,所有从Activity传过来的消息都会排在一个队列里,不会同时请求Service,所以是线程安全的。如果你的程序就是要多线程去访问Service,就可以用AIDL,不然最好使用Messenger的方式。

  • 使用AIDL

     这个方法略,如果知道上面两种方法,这个方法基本很少会用到。

4.Service和Thread的关系

  Service和Thread的关系:一毛钱关系都没有

  Service和Thread的区别:

  • 正常情况下Service运行于主线程,Thread是一个子线程
  • Service的优先级高于挂起的Activity,也高于Activity所创建的Thread

  Thread的生命周期

  • 在Activity中被创建:Thread的生命周期即为整个Activity的生命周期
  • 在Application中被创建:Thread的生命周期即为整个Application的生命周期
  • 在Service中被创建:这是保证Thread最长生命周期的唯一方式,只要Service不退出,Thread就一直在后台执行

  

  

  

时间: 2024-08-06 01:11:23

Android Service初步学习的笔记的相关文章

Android第一行学习代码笔记四---使用Intent在活动之间穿梭

一:使用显示Intent 右键com.example.firstactivity包->New->Activity->Empty Activity,活动名称为secondActivity,并勾选Generate Layout File,给布局文件起名为secondlayout,但并不勾选Launcher Activity选项,点击Finish,打开secondlayout.xml,将里面的代码替换成如下内容: <?xml version="1.0" encodin

Android中ActivityManager学习笔记(3)

在之前写过2篇关于ActivityManager的文章,如下所示.都是通过实战去了解里面的信息,现在感觉太繁琐,所以做一个api介绍比较详细.就像之前学习Telephony那样,对整体了解整个ActivityManager很有用. Android中ActivityManager学习笔记(1)-MemoryInfo Android中ActivityManager学习笔记(2)-RunningServiceInfo ActivityManager android.app包,含有6个内部类: Memo

android 浮动窗口学习笔记及个人理解(仿360手机助手)

非常感谢原文作者 http://blog.csdn.net/guolin_blog/article/details/8689140 经自己理解 程序运行界面如下图: 1.程序入口界面 2.小浮动窗口 3.大浮动窗口 由上图可看出,可以看出我们基本需要: 1.一个主Activity 2.小浮动窗口view界面 3.大浮动窗口view界面 对于浮动窗口的管理我们还需要 4.一个Service(在后台监控管理浮动窗口的状态) 5.窗口管理类(创建/消除浮动窗口) 代码: package com.ww.

从头学Android之Service初步二

在上一篇,我们学习了通过startService来启动Service,由于篇幅过长,所以这一篇是接上一篇的 二.bindService方法启动Service 先看bindSerivce(Intent service,ServiceConnection conn,int flags)函数 参数说明: service:通过该参数也就是Intent我们可以启动指定的Service conn:该参数是一个ServiceConnection对象,这个对角用于监听访问者(也可以说成是客户端)与Service

[Android游戏开发学习笔记]View和SurfaceView

本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在Android中涉及到显示的是View类,及继承自它的SurfaceView类和SurfaceView的其他子类等. 这里先只说View和SurfaceView.SurfaceView的直接子类有GLSurfaceView和VideoView,可以看出GL和视频播放以及CAmera摄像头一般均使用Su

Android源码学习初步

目前,互联网行业正在朝着移动互联网方向强劲地发展,而移动互联网的发展离不开背后的移动平台的支撑.众所周知,如今在移动平台市场上,苹果的iOS.谷歌的Android和微软的Windows Phone系统已经形成了三足鼎立的形势,而Android系统的市场占有率是最高的.Android系统之所以能够在市场上占据着第一的位置,一来是因为它依托着谷歌的品德效应和技术实力,二来是因为它是开放的,任何人都可以得到它的源代码,并且能够自由地使用它.既然Android系统是开放的,作为一个移动平台开发人员来说,

Android自定义View学习笔记04

Android自定义View学习笔记04 好长时间没有写相关的博客了,前几周在帮学姐做毕设,所以博客方面有些耽误.过程中写了一个类似wp的磁贴的view,想再写个配套的layout,所以昨天看了一下自定义viewGroup的相关知识-晚上睡觉想了一下可行性不是很高-代码量还不如直接自己在xml上写来得快,速度上也是个问题.今天看了一下张鸿洋老师的Android 自定义View (三) 圆环交替 等待效果这篇博文,再加上前一段时间看到的一幅图,结合之前写的一个圆形imageView的实现博文And

Android Socket编程学习笔记

通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务. 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定. 在java中,Socke

Android自定义View学习笔记03

Android自定义View学习笔记03 预备知识 BitMap类 BitMap位图类,其中有一个嵌套类叫Bitmap.Config,内部有四个枚举值.这个类的作用是定义位图存储质量,即存储一个像素的位数,以及是否能显示透明.半透明颜色(Possible bitmap configurations. A bitmap configuration describes how pixels are stored. This affects the quality (color depth) as w