Android服务之Service(其一)
转载地址:http://www.cnblogs.com/zhangdongzi/archive/2012/01/08/2316711.html
android中服务是运行在后台的东西,级别与activity差不多。既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西。你可以启动一个服务Service来播放音乐,或者记录你地理信息位置的改变,或者启动一个服务来运行并一直监听某种动作。
Service和其他组件一样,都是运行在主线程中,因此不能用它来做耗时的请求或者动作。你可以在服务中开一一个线程,在线程中做耗时动作。
那么究竟Service怎么使用呢?
老规矩,先来点基础知识。
一.基础知识
服务一般分为两种:
1:本地服务, Local Service 用于应用程序内部。在Service可以调用Context.startService()启动,调用Context.stopService()结束。在内部可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。无论调用了多少次startService(),都只需调用一次stopService()来停止。
2:远程服务, Remote Service 用于android系统内部的应用程序之间。可以定义接口并把接口暴露出来,以便其他应用进行操作。客户端建立到服务对象的连接,并通过那个连接来调用服务。调用Context.bindService()方法建立连接,并启动,以调用 Context.unbindService()关闭连接。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。
提供给可被其他应用复用,比如定义一个天气预报服务,提供与其他应用调用即可。
那么先来看Service的生命周期吧:如图:
context.startService() ->onCreate()- >onStart()->Service running--调用context.stopService() ->onDestroy()
context.bindService()->onCreate()->onBind()->Service running--调用>onUnbind() -> onDestroy() 从上诉可以知道分别对应本地的,,以及远程的,也对应不同的方式启动这个服务。
二.实战
我们可以定义一个本地服务继承Service,然后在这个服务里播放媒体播放器或者记录地理位置变化。通常有时候我们的Service要与Activity交互,那么可以可以定义一个内部类,返回这个Service,当然我们要考虑到如果是以绑定方式启动服务,那么内部类可以定义为继承Binder,然后返回本地服务,具体代码如下。
package com.dongzi;import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.Binder; import android.os.IBinder; import android.util.Log;public class LocalService extends Service {private static final String TAG = "LocalService"; private IBinder binder=new LocalService.LocalBinder();@Overridepublic IBinder onBind(Intent intent) {return binder;}MediaPlayer mediaPlayer=null;@Override public void onCreate() { Log.i(TAG, "onCreate"); //这里可以启动媒体播放器// if(mediaPlayer==null)// mediaPlayer=MediaPlayer.create(this, uri);super.onCreate(); } @Override public void onStart(Intent intent, int startId) { Log.i(TAG, "onStart"); super.onStart(intent, startId); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, "onStartCommand"); return START_STICKY;}@Override public void onDestroy() { Log.i(TAG, "onDestroy"); super.onDestroy(); } //定义内容类继承Binderpublic class LocalBinder extends Binder{//返回本地服务 LocalService getService(){return LocalService.this;}}}
我们可以从上面知道
//定义内容类继承Binder
public class LocalBinder extends Binder{
//返回本地服务
LocalService getService(){
return LocalService.this;
}
}
可以返回这个服务,然后activity可以通过服务调用服务的方法了。
那么如何启动服务呢?从上面基础知识中,我们知道有2种方法,如下:
//启动服务private void startCustomService(){Intent intent=new Intent(this,LocalService.class);startService(intent);
第2种绑定方式:
LocalService localService=null;//用bindService方法启动服务private void BinderService(){Intent intent=new Intent(this,LocalService.class);bindService(intent, new ServiceConnection(){@Overridepublic void onServiceConnected(ComponentName componentName, IBinder binder) {//调用bindService方法启动服务时候,如果服务需要与activity交互,//则通过onBind方法返回IBinder并返回当前本地服务localService=((LocalService.LocalBinder)binder).getService();//这里可以提示用户,或者调用服务的某些方法 }@Overridepublic void onServiceDisconnected(ComponentName componentName) {localService=null;//这里可以提示用户 } }, Context.BIND_AUTO_CREATE);}
在绑定服务的时候,需要一个服务连接对象,ServiceConnection,服务一旦连接,就会调用onServiceConnected方法,我们可以在这个方法里面返回我们的本地服务对象,具体看代码;而在服务断开时候会调用onServiceDisconnected方法,我们可以清理一些服务资源。
接下来,我们会讲解一些AIDL的一些知识。这些与服务息息相关。
转载于:https://www.cnblogs.com/songyao/p/4142026.html
Android服务之Service(其一)相关推荐
- Android 服务类Service 的详细学习
http://blog.csdn.net/vipzjyno1/article/details/26004831 Android服务类Service学习四大组建 目录(?)[+] 什么是服务 服务有什么 ...
- Android 服务(Service)
一.服务的解释 服务(Service)是Android中实现后台运行的解决方案,它适合那些去执行不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖任何的与任何用户界面,即使程序被切换到后台,或 ...
- Android服务之Service(四)--ASDL传递复杂数据对象
此实例与前面aidl不同之处在于,传递的数据比较复杂,传递了自定义数据对象,本实例使用到了两个数据对象Person和Pet,其中Person是作为远程调用Service传递的参数,Pet是远程Serv ...
- android 粘性service,Android服务1 Service
四大组件全部要注册 Service特点:用于在后台耗时操作 1. public class MyService extends Service { public IBinder onBind(Inte ...
- android服务程序开发,android 服务(service)开发
一.通过startService方式启动的服务:(后台处理工作),只能通过intent传递参数,但不能与Activity交互. 服务不能自己启动,需要通过其他的应用程序调用才能启动. 启动服务的应用, ...
- android必须服务,说说在Android如何使用服务(Service)的方法
Android 服务(Service)适合执行那些不需要和用户交互而且还要求长期运行的任务. 服务的运行不依赖于任何用户界面,即使 APP 被切换到后台,或者打开了另外一个 APP,服务仍然能够保持正 ...
- Android 编程下的四大组件之服务(Service)
服务(Service) 是一种在后台运行,没有界面的组件,由其他组件调用开始.Android 中的服务和 Windows 中的服务是类似的东西,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类 ...
- android服务无法启动,Android服务无法启动(Android service would't start)
Android服务无法启动(Android service would't start) 我正在尝试在Android中实现简单的服务,但我无法统计基本服务. 这是我的主要课程: import java ...
- android服务常驻内存,android service常驻内存的一点思考
我们总是不想自己的Android service被系统清理,以前时候大家最常用的办法就是在JNI里面fork出子进程,然后监视 service进程状态,被系统杀死了就重启它. 我分别在android4 ...
最新文章
- python max()_Python Decimal max()用法及代码示例
- 栈判断字符串是否为中心对称_数据结构和算法入门之判断括号字符串的合法性(valid parentheses)...
- 安装Kerberos服务端和客户端
- Vmware15的安装(ps解决:重装Vmware出现无法安装服务Vmware Authorization Service)
- CocoaPods did not set the base configuration of your project 问题解决方案
- Flink的异步I/O及Future和CompletableFuture
- Python | 这是过七夕吗?这是趁机学习一下下,就一下~~
- 马斯克谈买比特币:当法币实际利率为负时 只有“傻子”才不放眼他处
- 一致性Hash简单介绍和使用
- docker-compose 安装mongodb集群==多台服务器
- iPhone开发知识和项目
- python第二课知识点总结
- TPC,TPCC,TPMC(计算机性能衡量指标)
- 初步搭建 prometheus+ Grafana服务器性能监控平台
- python table类中的 可以作为初步观察工具_《趣学Python编程》习题总结
- [LeetCode] 969. 煎饼排序
- java在线编译器_java在线编译器-youjavait.com
- wpf实现类似word文档的标尺功能
- excel查重技巧:如何用组合函数快速统计重复数据(上)
- php7安装详解(windows环境)
热门文章
- ArcGIS在线资源集
- 图解NHibernate项目框架
- [Codeforces741D]Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths——dsu on tree
- nginx安装和基础代理配置
- 2、Python连接Mysql数据库。
- HDU 1693(状态压缩 插头DP)
- 计算神经网络隐藏层节点数极小值
- img 隐藏_CSS3界面样式和溢出文字隐藏overflow
- 【控制】二阶 UGV 的 时间-输入 指标性能最优解算
- TCL with SNPS - get_object_namesizeof_collectionstring