您的位置:首页 > 移动开发 > Android开发

Android混合方式开启服务

2017-02-18 15:42 127 查看
bind方式开启服务,可以调用服务的方法,但activity退出服务也随着退出,用 start 方式开启服务,可以保证activity关闭后,服务依然进行。很多需求都是两者的综合,比如音乐播放器,关闭activity,但音乐继续播放,activity还要调用Service方法,这就用到了混合方式。

①创建一个Service

public class MixService extends Service {

@Override
public IBinder onBind(Intent intent) {
System.out.println("onBind");
return new Binder();
}
@Override
public void onCreate() {
System.out.println("onCreate");
super.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() {
System.out.println("onDestroy");
super.onDestroy();
}
}
②配置service
<service android:name="com.haowan.MixService"></service>③MainActivity中
public class MainActivity extends Activity {

private Intent service;
private MyConnection conn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void start(View v){
service = new Intent(getApplication(),MixService.class);
startService(service);
}
public void stop(View v){
stopService(service);
}
public void bindstart(View v){
conn = new MyConnection();
bindService(service, conn, BIND_AUTO_CREATE);
}
public void bindstop(View v){
unbindService(conn);
}
private class MyConnection implements ServiceConnection{
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("onServiceConnected");
}

public void onServiceDisconnected(ComponentName name) {
System.out.println("onServiceDisconnected");
}
}

}
基本原理就是 startService 与bindservice都要调用,退出页面只需要调用unbindService , 以满足bindService的要求,该服务还在后台运行,只要没有调stopService
实战:一个音乐播放器的框架(核心代码)

MainActivity

public class MainActivity extends Activity {
private MyBinder binder;
private ServiceConnection conn;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent service=new Intent(getApplicationContext(),MusicPlayerService.class);
conn = new MyConnection();
bindService(service, conn,BIND_AUTO_CREATE );
startService(service);
}
private class MyConnection implements ServiceConnection
{
public void onServiceConnected(ComponentName name, IBinder service) {
binder=(MyBinder) service;
}
public void onServiceDisconnected(ComponentName name) {

}
}
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(conn);
}
public void previous(View v){
binder.previous2();
}
public void play(View v){
binder.play2();
}
public void next(View v){
binder.next2();
}
}
Service  还要再清单文件中配置
public class MusicPlayerService extends Service{

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return new MyBinder();
}

public class MyBinder extends Binder{
public void next2(){
next();
}
public void play2(){
play();
}
public void previous2(){
previous();
}
}
@Override
public void onCreate() {
super.onCreate();
System.out.println("准备一个音乐播放器");
}
public void next(){
System.out.println("播放下一首");
}
public void play(){
System.out.println("播放");
}
public void previous(){
System.out.println("播放上一首");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  音乐 android