bindService
public class BindService extends Service {
private static final String TAG = "BindService";
private IBinder binder=new MyBinder();
public class MyBinder extends Binder{
public BindService getService(){
return BindService.this;
}
}
@Override
public IBinder onBind(Intent arg0) {
return binder;
}
public void show(){
System.out.println("df123123123");
Log.i(TAG,"show()");
}
@Override
public void onCreate() {
Log.i(TAG,"onCreate()");
super.onCreate();
}
}
MainActivity
private void unbindService() {
if (isConnected) {
unbindService(conn);
isConnected = false;
Log.i(TAG, "unbindService");
}
}
private void bindService() {
Intent intent1 = new Intent(MainActivity.this, BindService.class);
bindService(intent1,conn,Context.BIND_AUTO_CREATE);
Log.i(TAG, "bindService");
}
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
isConnected = false;
Log.i(TAG, "onServiceDisconnected");
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Toast.makeText(MainActivity.this, "Service Connected.", Toast.LENGTH_SHORT).show();
MyBinder binder = (MyBinder) service;
BindService bind = binder.getService();
bind.show();
isConnected = true;
}
};
注:ServiceConnection中的onServiceDisconnected()方法不会在unbindService()时调用,只有在被系统杀死服务时才调用.onServiceConnected()只有在绑定服务时调用一次,在没unbind服务时不会再调用
onCreate()-->onBind()-->onUnbind()-->onDestroy()
startService
public class MyService extends Service {
private static final String TAG = "my";
int i=0;
@Override
public void onCreate() {
Log.i(TAG, "onCreate()"+Thread.currentThread().getName());
super.onCreate();
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
Log.i(TAG, "onDestroy()"+Thread.currentThread().getName());
super.onDestroy();
}
//执行任务在此方法中
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.i(TAG, "onStartCommand()"+i++);
return /*super.onStartCommand(intent, flags, startId)*/START_REDELIVER_INTENT;
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
Log.i(TAG, "onBind()");
return null;
}
}
MainActivity
Intent intent = new Intent(MainActivity.this, MyService.class);
switch (v.getId()) {
case R.id.button1:
startService(intent);
break;
case R.id.button2:
stopService(intent);
break;
onCreate()-->onStartCommand()-->onDestroy()
IntentService
public class MyIntentService extends IntentService {
private static final String TAG = "MyIntentService";
public MyIntentService() {
super("MyIntentService");//此处得是类名
// TODO Auto-generated constructor stub
}
//每次start服务都会执行此方法,当上个任务完成,才会执行下次任务,当所有任务完成会自动停止服务
protected void onHandleIntent(Intent intent) {
Log.i(TAG, "IntentService"+Thread.currentThread().getId());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
MainActivity
startService(new Intent(MainActivity.this,MyIntentService.class));