Android基础之Service

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基本不会被系统回收

转载于:https://www.cnblogs.com/nightkidzxc/archive/2012/02/23/2379004.html

你可能感兴趣的:(移动开发)