public void onClick(View v){
if(v==bind){
Log.i("aa","start");
Intent i = new Intent();
i.setClass(this, service.class);
bindService(i, conn, BIND_AUTO_CREATE);
}
else if (v==unbind){
Log.i("aa","stop");
unbindService(conn);
}
else if (v==start){
Intent intent =new Intent();
intent.setClass(this,service.class);
startService(intent);
}
else {
Intent intent = new Intent();
intent.setClass(this, service.class);
stopService(intent);
}
}
第一次执行startService 会执行 onCreate -> onStartCommand -> onStart
第二次执行 startService 不会调用 onCreate 也不会生成新的实例,但是会再次调用 onStartCommand -> onStart (在onStart里new timer()会导致多个timer线程同时存在)
stop执行后 调用 onDestroy 服务停止后 执行stop不会有反应。
执行bind onCreate(第一次创建服务实例,但不会开始执行服务,即不调用onStart)->onBinder->serviceConnection
unbind 调用 onUnbinder->onDestroy 没有实例的时候会崩
private ServiceConnection conn = new ServiceConnection(){
@Override
public void onServiceDisconnected(ComponentName name){
Log.i("aaa","onServiceDisconnection");
}
@Override
public void onServiceConnected(ComponentName name,IBinder service){
Log.i("aaa","onServiceconnection");
}
};
public class service extends Service{
@Override
public IBinder onBind(Intent intent){
Log.i("aaa","onbinder");
return new Binder();
}
@Override
public boolean onUnbind(Intent intent){
Log.i("aaa","onUnbind"+" "+intent.getType());
return super.onUnbind(intent);
}
@Override
public void onDestroy(){
Log.i("aaa","onDestroy");
super.onDestroy();
}
@Override
public void onCreate(){
Log.i("aaa","onCreate");
super.onCreate();
}
@Override
public void onStart(Intent intent , int startId){
Log.i("aaa","onStart"+" "+startId);
super.onStart(intent, startId);
}
@Override
public int onStartCommand(Intent intent,int flags,int startId){
Log.i("aaa","onstartCommand");
return super.onStartCommand(intent, flags, startId);
}
}
最后注意要把 service 加在manifest里
<service android:name="com.ServiceTest.service" android:exported="true"></service>