Androidx学习笔记(64)---服务两种启动方式

来源:互联网 发布:3d算法技巧 编辑:程序博客网 时间:2024/06/11 10:03

服务两种启动方式

  • startService:服务被启动之后,跟启动它的组件没有一毛钱关系
  • bindService:跟启动它的组件同生共死
  • 绑定服务和解绑服务的生命周期方法:onCreate->onBind->onUnbind->onDestroy


开启方式

  • startService
    • 该方法启动的服务所在的进程属于服务进程
    • Activity一旦启动服务,服务就跟Activity一毛钱关系也没有了
  • bindService

    • 该方法启动的服务所在进程不属于服务进程
    • Activity与服务建立连接,Activity一旦死亡,服务也会死亡
  • 服务的混合调用

    • 先开始、再绑定,先解绑、再停止

两种启动方法混合使用

  • 用服务实现音乐播放时,因为音乐播放必须运行在服务进程中,可是音乐服务中的方法,需要被前台Activity所调用,所以需要混合启动音乐服务
  • 先start,再bind,销毁时先unbind,在stop



服务代码

public class MyService extends Service {
 
//绑定时调用
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
System.out.println("bind方法");
return null;
}
 
//解绑时调用
@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
System.out.println("unbind方法");
return super.onUnbind(intent);
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
System.out.println("create方法");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
System.out.println("start方法");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
System.out.println("destroy方法");
super.onDestroy();
}
}


事件代码

public class MainActivity extends Activity {
 
private Intent intent;
private MyServiceConn conn;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intent = new Intent(this, MyService.class);
conn = new MyServiceConn();
}
 
 
public void start(View v){
startService(intent);
}
public void stop(View v){
stopService(intent);
}
public void bind(View v){
//绑定服务
bindService(intent, conn, BIND_AUTO_CREATE);
}
public void unbind(View v){
//解绑服务
unbindService(conn);
}
class MyServiceConn implements ServiceConnection{
 
//服务连接成功时,此方法调用
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
}
 
//服务失去连接时,此方法调用
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
}
}
0 0
原创粉丝点击