android四大组件之一 Service
Service 服务,一般在后台运行,没有界面
Service特点:
·在后台运行,不与用户交互,应用退出服务也不会停止。当应用进程停止时,服务才停止
·service运行在主线程中,执行耗时操作时,须在服务中开启子线程
·应用:播放音乐、后台下载大文件等
如何创建Service
1.自定义类继承Service
2.重写方法
3.清单文件注册
Service启动方式及生命周期
1.启动方式:onCreate—>onStartCommand()—>onDestory()
开启服务:startService()
停止服务:stopService()
2.绑定方式onCreate()—>onBinde()—>onUnbind()—>onDerstory()
绑定服务bindService()
解除绑定unbindService();
3.先启动后绑定(常用):onCreate() – onStartCommand() – onBind() — onUnbind() – onDestroy()
两种启动方式
start方式:一旦开启,长期后台运行,与Activity无关,不能调用服务里的放法
bind方式:如果开启者(Activity)退出了,服务也会跟着挂掉,可以通过binder调用服务里的方法
public class MyServer extends Service {
@Override
public IBinder onBind(Intent intent) {
return new Mybinder();
}
class Mybinder extends Binder{
public void play(){
Toast.makeText(MyServer.this, "哈哈哈", Toast.LENGTH_SHORT).show();
}
}
}
public class MainActivity extends AppCompatActivity {
Intent intent;
Button btn1,btn2,btn3,btn4;
//绑定时的连接
ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
MyServer.Mybinder mybinder = (MyServer.Mybinder) service;//binder中介
mybinder.play();//调用服务方法
}
@Override
public void onServiceDisconnected(ComponentName name) {
Toast.makeText(MainActivity.this, "绑定失败", Toast.LENGTH_SHORT).show();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = findViewById(R.id.btn_start);
btn2 = findViewById(R.id.btn_end);
btn3 = findViewById(R.id.btn_start1);
btn4 = findViewById(R.id.btn_end1);
intent = new Intent(MainActivity.this,MyServer.class) ;
//开启
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startService(intent);
}
});
//停止
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(intent);
}
});
//绑定
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bindService(intent,serviceConnection,BIND_AUTO_CREATE);
}
});
//解除绑定
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
unbindService(serviceConnection);
}
});
}
}