Service基础介绍
一、新建继承Service的类
1 @Override 2 public IBinder onBind(Intent intent){ 3 return null; 4 } 5 //并重写以下方法 6 //第一次创建的时候调用 7 @Override 8 public void onCreate(){ 9 super.onCreate(); 10 setForeground(true);//服务所在进程设置为前台进程 11 } 12 @Override 13 public void onStart(Intent intent,int startId){ 14 super.onStart(intent,startId); 15 } 16 @Override 17 public void onDestroy(){ 18 super.onDestroy(); 19 }
二、激活服务
1 Intent intent = new Intent(this,DemoService.class); 2 startService(intent); 3 stopService(intent);
三、清单文件配置
1 <service 2 android:name=".DemoService" 3 />
四、绑定服务
startService一旦开启与调用者无关
bindService开启的服务,调用者关闭则服务也关闭
1 //服务不存在时会自动创建服务 2 bindService(intent,sConn,Context.BIND_AUTO_CREATE); 3 //解除绑定,服务只能解除绑定一次,否则会出异常 4 unbindService(sConn); 5 6 private class SConn implements ServiceConnection{ 7 @Override 8 public void onServiceConnected(ComponentName name,IBinder service){ 9 //绑定服务时调用service的值是服务中onBind方法返回的 10 11 } 12 @Override 13 public void onServiceDisconnected(ComponentName name){ 14 15 } 16 }
服务的类中的部分代码
1 @Override 2 public IBinder onBind(Intent intent){ 3 return null; 4 } 5 6 @Override 7 public IBinder onUnbind(Intent intent){ 8 return super.onUnbind(intent); 9 }
五、调用Service中的方法
新建类继承Service
1 public class DemoService extends Service{ 2 3 //新建内部类 4 public class DemoServiceBinder extends Binder{ 5 DemoServiceBinder getService(){ 6 return DemoService.this; 7 } 8 } 9 10 //实例化内部类 11 private final IBinder basBinder = new DemoServiceBinder(); 12 13 //重写绑定方法,返回内部类对象 14 @Override 15 public IBinder onBind(Intent intent){ 16 return basBinder; 17 } 18 19 //要调用的方法 20 public void DemoMethod(){ 21 ... 22 } 23 24 }
Activity类
1 public class DemoActivity extends Activity{ 2 3 //定义按钮的点击事件 4 public void onClick(View v){ 5 //开始并绑定服务 6 startService(serviceIntent); 7 bindService(serviceIntent,conn,Context.BIND_AUTO_CREATE); 8 9 //通过service调用服务里的方法 10 ... 11 12 //解除绑定并停止服务 13 unbindService(serviceIntent); 14 stopService(serviceIntent); 15 } 16 17 18 private DemoService service; 19 //创建Service连接 20 private ServiceConnection conn = new ServiceConnection(){ 21 public void onServiceConnected(ComponentName className,IBinder baBinder){ 22 service = ((DemoService.DemoServiceBinder)baBinder).getService(); 23 } 24 25 public void onServiceDisconnected(ComponentName className){ 26 service = null; 27 } 28 } 29 30 }