Service(服务)
基本概念:Service是一种在后台运行,没有界面的组件,有其他组件调用开始。
一个Service:
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
public class MyService extends Service {
@Override
public void onCreate() {
super.onCreate();
System.out.println("onCreate");
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
System.out.println("onStart");
}
@Override
public IBinder onBind(Intent intent) {
System.out.println("onBind");
return new MyBinder();
}
@Override
public boolean onUnbind(Intent intent) {
System.out.println("onUnbind");
return super.onUnbind(intent);
}
@Override
public void onDestroy() {
super.onDestroy();
System.out.println("onDestroy");
}
private class MyBinder extends Binder implements InvokeMethod {
public String getMessage() {
return "MyBinder getMessage String .....";
}
}
}
绑定服务:
在Activity中调用bindService方法,传入一个ServiceConnection。
执行Service中的onBind方法,返回IBinder。
执行ServiceConnection中的onServiceConnection方法接收到IBinder。
在Activity中用收到的IBinder调用方法,内部就是会调用Service中的方法。
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
private Button startButton;
private Button bindtButton;
private Button unbindButton;
private Button endButton;
private MyServiceConnection conn= new MyServiceConnection();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startButton = (Button) findViewById(R.id.button1);
bindtButton = (Button) findViewById(R.id.button2);
unbindButton = (Button) findViewById(R.id.button3);
endButton = (Button) findViewById(R.id.button4);
startButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MyService.class);
startService(intent);
}
});
bindtButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MyService.class);
bindService(intent, conn, BIND_AUTO_CREATE);
}
});
unbindButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
unbindService(conn);
}
});
endButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MyService.class);
stopService(intent);
}
});
}
private class MyServiceConnection implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println(name.getClassName());
InvokeMethod method = (InvokeMethod) service;
String msg=method.getMessage();
System.out.println(msg);
}
@Override
public void onServiceDisconnected(ComponentName name) {
System.out.println(name.getClassName());
}
}
}