一、Service
一个组件长期后台运行,没有界面,可以理解为一个没有界面长期运行的activity。service经常用来处理一些耗时间的程序,比如网络传输或者播放音乐
1.掌握服务的生命周期
2.掌握服务的两种启动方式
3.学会使用服务与activity进行通信
4.学会调用其他应用的服务(跨进程通信)
1 创建一个服务
1)创建一个服务类继承servie
public class MyServices extends Service {
@Override
public IBinder onBind(Intent intent) {
System.out.println("wo shi fu wu");
return null;
}
}
2)在清单文件里面配置服务
<service android:name="com.example.myservice.MyServices"></service>
3) 在MainActivity里面开启服务
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//开启服务
Intent intent = new Intent(this,MyServices.class);
startService(intent);
}
}
2 服务的生命周期
服务启动方式
1) start开启服务
startService(intent);
直接开启服务,一旦开启跟调用者没用任何关系,调用者activity没法访问服务里面的方法
周期
onCreate —>onStartCommand —> onStart(过时方法 ) —>onDestory
一旦服务被开启后,就不会再调用onCreate方法
stopService(intent);
关闭服务
2) bind开启服务
bindService()
绑定开启服务,服务和开启者有密切关系,只要activity停止,服务也跟着关闭,调用者activity可以调用服务里面的方法
绑定方式开启服务,调用服务方法的流程
绑定生命周期 oncreate() —> onbind() —> onDestory();不会调用onstart()方法和onStartCommand方法
1.使用bindService的方式开启服务
bindService(intent, new MyConn(), Context.BIND_AUTO_CREATE);
2.实现一个MyConn服务与activity的通讯频道(中间人的联系渠道)
private class MyConn implements ServiceConnection{
/**
* 服务成功绑定时执行的方法,得到中间人
*/
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myBinder = (MyBinder) service;
}
/**
* 服务失去绑定或者突然异常终止的时候调用的方法
*/
@Override
public void onServiceDisconnected(ComponentName name) {
}
3.服务成功绑定的时候会执行onBinder方法,返回中间人
public class MyBinder extends Binder {
/**
* 内部人员帮助外部调用服务的方法
*/
public void callMethonInService(){
methodInService();
}
}