一、服务(Service)介绍
Service是android四大组件之一(四大组件:activity、Service、Broadcast Receivers、Content Providers),没有界面,在后台处理的,主要用在后台处理,比如:文件下载等。
二、服务(Service)的创建
1、创建一个java类,让它继承service;
2、清单文件(AndroidManifest.xml)中自动生成配置
三、服务的生命周期
startService启动时,生命周期方法:onCreate -> onStartCommand ->onDestroy 停止服务:stopService
bindtService启动时,生命周期方法:onCreate -> onBind -> onUnbind ->onDestroy 停止服务:unbindService
生命周期方法
onCreate() | 第一次创建服务时执行的方法。 |
---|---|
onStartCommand() | 调用startService0方法 启动服务时执行的方法。 |
onBind() | 调用bindService()方法启动服务时执行的方法。 |
onUnbind() | 调用unBindService()方法断开服务绑定时执行的方法。 |
onDestory() | 服务被销毁时执行的方法。 |
四、服务的启动方式
案例1:演示startService 和 stopService的使用
- 在MyService中声明生命周期方法
@Override
public void onCreate() {
Log.i("MyService","执行onCreate方法");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("执行onStartCommand方法");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
System.out.println("执行onDestory方法");
}
- 在主类中开启和关闭服务
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn_start).setOnClickListener(view -> {
//启动服务
Intent intent = new Intent(this,MyService.class);
startService(intent);
});
findViewById(R.id.btn_stop).setOnClickListener(view -> {
//关闭服务
Intent intent = new Intent(this,MyService.class);
stopService(intent);
});
}
- 控制台打印
只有服务创建的时候执行onCreate,启动服务时只执行onStartCommand
案例2:演示startService 和 stopService的使用
- 在MyService中定义生命周期方法
public class MyService extends Service {
public MyService() {
}
@Override
public void onCreate() {
super.onCreate();
System.out.println("执行onCreate");
}
class MyBinder extends Binder{
}
@Override
public IBinder onBind(Intent intent) {
System.out.println("执行onBind");
return new MyBinder();
}
@Override
public boolean onUnbind(Intent intent) {
System.out.println("执行onUnbind");
return super.onUnbind(intent);
}
@Override
public void onDestroy() {
super.onDestroy();
System.out.println("执行onDestroy");
}
}
MainActivity演示 绑定 和 解绑
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
MyService.MyBinder myBinder;
MyConn myConn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
void init() {
findViewById(R.id.btn_bind).setOnClickListener(this);//绑定
findViewById(R.id.btn_unbind).setOnClickListener(this);//解绑
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_bind:
Intent intent = new Intent(this, MyService.class);
myConn = new MyConn();
bindService(intent, myConn, BIND_AUTO_CREATE);
break;
case R.id.btn_unbind:
unbindService(myConn);
break;
}
}
class MyConn implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
myBinder = (MyService.MyBinder) iBinder;
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
}
}
}
控制台打印
案例3:音乐播放器
代码比较多我就不放了