四大组件之Service

Service

一.定义:可长时间在后台运行并进行操作,是个没有界面的组件,可以被其他组件绑定,在进程间通信。
二.创建:1定义类继承Service               
public class ExampleService extends Service {
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}
}
                2清单文件中配置
<service android:name="com.example.service.ExampleService"></service>
三.服务的启动与停止
     在其他组件调用startService()方法启动service
     在其他组件调用stopService()方法停止service
     stopSelf()//若调用此方法停止服务,无论其他执行是否结束,都会立即停止
     stopSelf(startId)//若调用此方法停止服务,等到所有其他执行都结束才会停止服务
四.耗时操作
     若要在服务中进行耗时操作,需要开启新的线程,因为service本身是在主线程中运行
     若希望服务长期运行,内存不足的时候也不会被杀,可设置为前台进行服务startForeground()
五.生命周期      
       /**
	 * 服务一旦创建,就不会被重复创建
	 * 此方法只会执行一次,若服务已开启,这个方法就不会再去执行
	 */
	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
	}
	/**
	 * 服务在停止的时候会调用这个方法
	 */
	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
	}
	/**
	 * 每一次开启服务的时候调用
	 */
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		// TODO Auto-generated method stub
		return super.onStartCommand(intent, flags, startId);
	}
	/**
	 * 每一次开启服务的时候掉用,但此方法已被废弃
	 */
	@Override
	public void onStart(Intent intent, int startId) {
		// TODO Auto-generated method stub
		super.onStart(intent, startId);
	}
     若是希望一开机便启动服务,需要通过广播接收者BootReceiver      
public class BootReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
        Intent i=new Intent(context,ExampleService.class);
        context.startService(i);
	}
}
     清单文件中配置属性及权限  
   <receiver android:name="com.example.service.BootReceiver">
            <intent-filter >
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
   </receiver>
   <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
六.服务开启的两种方式
    1.startService():服务一旦开启就与开启者(Activity)没什么关系了,Activity挂掉了,服务还是会在后台运行。
    2.bindService():服务与Activity有关系,Activity挂掉,服务也会挂掉(不求同时生,但求同时死);但是服务挂掉,                                   Activity不会挂掉。
                                服务只能被显示的解除绑定一次,多次的解除绑定服务 应用程序会报异常
七.绑定服务
绑定服务调用服务里面方法的流程:
1. 在activity 采用bindService方式开启服务...
2. 写一个实现类 MyConn implements ServiceConnection
3.  接口里面有一个方法onServiceConnected 在服务成功绑定的时候调用的方法
4.  在service代码 实现 onBind方法  返回一个IBinder接口的实现( 里面必须一个调用服务方法的api)
5.  在服务成功绑定的时候 服务里面返回的IBinder对象会传给 activity里面onServiceConnected 方法
6. 获取IBinder对象 中间人, 调用中间人的方法. 间接调用了服务里面的方法

  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值