您的位置:首页 > 移动开发 > Android开发

Android基础之Service

2012-02-23 14:54 274 查看
Service是android四大组件之一,服务Service是没有与用户交互界面,在后台运行的操作.

一般用来在后台处理比较耗时的操作,比如网络操作,媒体播放,I/O操作,和ContentProvider交互等,但是Service默认还是在主线程中,除非新建一个线程在其中执行Service

需要在Manifest.xml文件中进行注册后才能使用

Service可以分为两类StartedService和BoundService

声明一个Service

声明一个类继承自Service类,在minifest.xml文件中注册
复写onStartCommand()方法允许这个Service可以被startService方法调用
复写onBind()方法允许这个Service可以被Bound
也可以同时重写这两个方法,使Service可以被start也可以bound

Service一些重要的回调方法
onCreate

onStartCommand //在1.6及之前叫做onStart
onBind
onDestory

Service生命周期



启动一个start Service

在一个Activity或者Service中可以启动一个Service
Intent intent=new Intent();
startService(intent);//是最简单的Service启动方式
只要使用了startService()方法,就有必要在之后调用stopSelf()或者stopService()来结束服务

启动一个IntentService

IntentService继承自Service,也是startService来启动,关键是IntentService可以启动另外的一个工作线程来处理Service事务
每次把一个intent传递给onHandleIntent方法进行处理,不用程序员调用stopSelf()方法
启动IntentService的方法与上面一个Service相同
不同的地方是Service继承自IntentService类,并且重写onHandlerIntent方法,通过此方法来进行intent处理

绑定一个Service

要创建一个绑定的Service,需要在Service类中重写onBind()方法来返回一个IBinder对象,提供接口来与Service进行交互
别的控件可以调用bindService()方法来得到这个接口并且调用Service中的服务
//在被绑定的Service类中重写onBind方法,返回一个IBinde对象,可以通过它来得到Service的引用,从而操作Service

//在要绑定service的控件中,比如这里的Activity

//Intent intent=new Intent(this,TestBindService);

//bindService(intent,conn,BIND_AUTO_CREATE); 这里的conn对象是一个ServiceConnection对象

//new一个ServiceConnection对象的话会自动重写onServiceConnected和onServiceDisconnected方法

//比如在onServiceConnected方法中获得返回的Binder

//newBinder getBinder=(newBinder)arg1; 这里arg1是onServiceConnected方法中返回的Binder参数

//TestBindService tbs=(TestBindService)getBinder.getService(); 这里获得了要绑定的Service的引用

//tbs.ServiceFunction(); 再通过这个引用来控制Service执行其中的方法

在前台运行Service

在notification中设置一个进度条来让用户看到Service的执行进度
setForeground(); 被setForeground的Service基本不会被系统回收
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: