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()//若调用此方法停止服务,无论其他执行是否结束,都会立即停止
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对象 中间人, 调用中间人的方法. 间接调用了服务里面的方法
1. 在activity 采用bindService方式开启服务...
2. 写一个实现类 MyConn implements ServiceConnection
3. 接口里面有一个方法onServiceConnected 在服务成功绑定的时候调用的方法
4. 在service代码 实现 onBind方法 返回一个IBinder接口的实现( 里面必须一个调用服务方法的api)
5. 在服务成功绑定的时候 服务里面返回的IBinder对象会传给 activity里面onServiceConnected 方法
6. 获取IBinder对象 中间人, 调用中间人的方法. 间接调用了服务里面的方法