怎么让在启动一个Activity是就启动一个service
首先定义好一个service,然后在Activity的onCreate里面进行连接并bindservice或者直接startService
Activity怎么和service绑定,怎么在activity中启动自己对应的service
- activity能进行绑定得益于Service的接口。为了支持Service的绑定,实现onBind方法。此处可以参考:Android Service生命周期_Cong Pong的博客-优快云博客
- Service和Activity的连接可以用ServiceConnection来实现。需要实现一个新的ServiceConnection,重现onServiceConnected和OnServiceDisconnected方法,一旦连接建立,就能得到Service实例的引用。
private Service1 myservice = null;//绑定的service对象 //连接对象,重写OnserviceDisconnected和OnserviceConnected方法 public ServiceConnection conn= new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { Log.i(LOG, "onServiceDisconnected>>>>>>>>"); myservice = null; } @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.i(LOG, "onServiceConnected>>>>>>>>"); myservice = ((Service1.MyBinder)service).getService(); Log.i(LOG, myservice+">>>>>>>>"); } };
- 执行绑定,调用bindService方法,传入一个选择了要绑定的Service的Intent(显示或隐式)和一个你实现了的ServiceConnection的实例
在Activity 的onCreate中 开始绑定 Intent intent = new Intent(Activity1.this,Service1.class); bindService(intent, conn, Context.BIND_AUTO_CREATE);
完整代码
Service:
public class Service1 extends Service{
private final IBinder binder = new MyBinder();
private static final String LOG="mp3";
@Override
public IBinder onBind(Intent intent) {
Log.i(LOG, "onBind............");
return binder;
}
public class MyBinder extends Binder{
public Service1 getService(){
return Service1.this;
}
}
@Override
public void onCreate() {
Log.i(LOG, "oncreate............");
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
Log.i(LOG, "onstart............");
super.onStart(intent, startId);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(LOG, "onstartcommand............");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Log.i(LOG, "ondestory............");
super.onDestroy();
}
}
Activity:
public class Activity1 extends Activity {
private Button btn1 = null;
private static String LOG="mp3";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1 = (Button) findViewById(R.id.button1);
btn1.setOnClickListener(new btn1ClickListener());
//开始绑定
Intent intent = new Intent(Activity1.this,Service1.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
}
private Service1 myservice = null;//绑定的service对象
//连接对象,重写OnserviceDisconnected和OnserviceConnected方法
public ServiceConnection conn= new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i(LOG, "onServiceDisconnected>>>>>>>>");
myservice = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i(LOG, "onServiceConnected>>>>>>>>");
myservice = ((Service1.MyBinder)service).getService();
Log.i(LOG, myservice+">>>>>>>>");
}
};
class btn1ClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
unbindService(conn);
}
}
}