AndroidManifest.xml 注册
<service
android:name="com.example.myservice.BindService">
<intent-filter >
<action android:name="yaosai.gogo"/>
</intent-filter>
</service>
继承了service的子类
public class BindService extends Service {
//计数器及开关
private int count;
private boolean quit;
private Mybinder mybinder = new Mybinder();
//通过继承binder来实现IBinder的类 作为service的代理人,实现了客户端与service的绑定
public class Mybinder extends Binder{
public int getCount(){
//获取service的运行状态count
return count;
}
}
//返回一个IBinder对象
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
System.out.println("service is binded");
return mybinder;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
System.out.println("创建了oncreate");
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while(!quit){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
count++;
}
}
}).start();
}
//service 被断开连接时回调该方法 关闭连接
@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
System.out.println("service is unbind");
return super.onUnbind(intent);
}
//销毁
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
this.quit = true;
System.out.println("Service is Destroy");
}
}
主方法开启service
public class MainActivity extends Activity {
private Button startService;
private Button stopService;
private Button gerService;
//一个service代理对象
BindService.Mybinder binder;
//一个监听访问者与service之间的连接情况
private ServiceConnection conn = new ServiceConnection() {
//连接失败回调
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
System.out.println("--onServiceDisconnected--");
}
//连接成功 回调
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
//返回service中onBind返回的binder对象
binder= (Mybinder) service;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startService = (Button) findViewById(R.id.button1);
stopService = (Button) findViewById(R.id.button2);
gerService = (Button) findViewById(R.id.button3);
final Intent intetn = new Intent();
intetn.setAction("yaosai.gogo");
startService.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//开启service ① 意图 ② ServiceConnection ③是否创建
bindService(intetn, conn, Service.BIND_AUTO_CREATE);
}
});
stopService.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//关闭
unbindService(conn);
}
});
gerService.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//根据代理binder获得数据
Toast.makeText(MainActivity.this, "count的值:"+binder.getCount(), Toast.LENGTH_SHORT).show();
}
});
}
}