android service 介绍
来源:互联网 发布:淘宝打包员好做吗 编辑:程序博客网 时间:2024/05/23 00:08
作为一款多任务操作系统,如果不能运行后台服务,显然说不过去,Android 当然提供了运行后台程序的方法。而且非常简单易用,只不过有一些小问题需要注意,这个主题分为两部分,第一部分是如何实现一个Service以及他的生命周期,第二部分是对于一个个后台服务应该注意的事项。我们开始吧!
创建服务类
所谓的服务,在Android里被称做 Service,只要继承 android.app.Service 这个抽象类,并且实现其中几个方法就可以了。
服务的生命周期
有了 Service 类我们如何启动他呢,有两种方法:
- Context.startService()
- Context.bindService()
在同一个应用任何地方调用 startService() 方法就能启动 Service 了,然后系统会回调 Service 类的 onCreate() 以及 onStart() 方法。这样启动的 Service 会一直运行在后台,直到 Context.stopService() 或者 selfStop() 方法被调用。另外如果一个 Service 已经被启动,其他代码再试图调用 startService() 方法,是不会执行 onCreate() 的,但会重新执行一次 onStart() 。
另外一种 bindService() 方法的意思是,把这个 Service 和调用 Service 的客户类绑起来,如果调用这个客户类被销毁,Service 也会被销毁。用这个方法的一个好处是,bindService() 方法执行后 Service 会回调上边提到的 onBind() 方发,你可以从这里返回一个实现了 IBind 接口的类,在客户端操作这个类就能和这个服务通信了,比如得到 Service 运行的状态或其他操作。如果 Service 还没有运行,使用这个方法启动 Service 就会 onCreate() 方法而不会调用 onStart()。
与 Service 通信并且让它持续运行
如果我们想保持和 Service 的通信,又不想让 Service 随着 Activity 退出而退出呢?你可以先 startService() 然后再 bindService() 。当你不需要绑定的时候就执行 unbindService() 方法,执行这个方法只会触发 Service 的 onUnbind() 而不会把这个 Service 销毁。这样就可以既保持和 Service 的通信,也不会随着 Activity 销毁而销毁了。
提高 Service 优先级
Android 系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用。当系统觉得当前的资源非常有限的时候,为了保 证一些优先级高的程序能运行,就会杀掉一些他认为不重要的程序或者服务来释放内存。这样就能保证真正对用户有用的程序仍然再运行。如果你的 Service 碰上了这种情况,多半会先被杀掉。但如果你增加 Service 的优先级就能让他多留一会,我们可以用 setForeground(true) 来设置 Service 的优先级。
为什么是 foreground ? 默认启动的 Service 是被标记为 background,当前运行的 Activity 一般被标记为 foreground,也就是说你给 Service 设置了 foreground 那么他就和正在运行的 Activity 类似优先级得到了一定的提高。当让这并不能保证你得 Service 永远不被杀掉,只是提高了他的优先级。
- Android Service介绍
- Android Service 介绍
- Android Service 介绍
- Android Service 介绍
- Android Service 介绍
- android service 介绍
- android service介绍
- 介绍 Android DropBoxManager Service
- 介绍 Android DropBoxManager Service
- Android Service介绍
- Android Service介绍
- Android中Service介绍
- Android Service介绍
- Android 01 Service 介绍
- android service 介绍
- Android Service介绍
- Android的Service介绍
- Android Service介绍
- Java文件下载相关
- fisheye2.3.6 安装笔记
- 使用libpcap分析网络报文
- sum rule
- Flex和Java通信之Socket
- android service 介绍
- 基于axis2的WebService获取客户端请求IP地址
- 深入理解 Android Activity的生命周期
- 动态显示文章发表时间的方法
- 利用apache的HttpClient组件得到http内容
- C++中final类的实现
- iis常见错误
- 关于0xa0
- ASP.NET页面之间传递值方式优缺点比较