android 绑定服务

来源:互联网 发布:linux dns配置 ubuntu 编辑:程序博客网 时间:2024/06/05 06:10

如果我们想调用服务里面的方法,这个是不允许的,我们可以通过绑定服务间接地调用服务的serviceConnection实现类获取服务开启和停止的消息。当服务成功被绑定的时候会执行OnBind方法,返回一个IBinder的代理对象,代理对象里面有个方法可以间接的调用到服务的方法。 


Activity类:

public class MainActivity extends Activity {private Button bindButton;private Button unBindButton;private Button serviceMethod;private IService binder;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bindButton = (Button) findViewById(R.id.button1);unBindButton = (Button) findViewById(R.id.button2);serviceMethod = (Button) findViewById(R.id.button3);// 绑定服务bindButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, TestService.class);bindService(intent, new ServiceConnections(), BIND_AUTO_CREATE);}});// 解除绑定unBindButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, TestService.class);unbindService(new ServiceConnections());}});// 调用服务的方法serviceMethod.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {binder.classInServiceMethod();}});}class ServiceConnections implements ServiceConnection {// 当服务成功绑定后调用该方法@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {binder = (IService) service;}@Overridepublic void onServiceDisconnected(ComponentName name) {}}}

Service类:

public class TestService extends Service {@Overridepublic IBinder onBind(Intent intent) {// 服务成功绑定,返回一个代理对象return new MyBinder();}/** * 为什么要定义成private呢,安全起见,只能让他调用接口中的方法 *  * @author Administrator *  */private class MyBinder extends Binder implements IService {// 代理人间接地调用服务的方法@Overridepublic void classInServiceMethod() {serviceMethod();}}// 服务里面的方法private void serviceMethod() {Toast.makeText(getApplicationContext(), "我是服务里面的方法,你不能直接调用我 ", 1).show();}@Overridepublic void onCreate() {System.out.println("服务创建了");super.onCreate();}@Overridepublic void onDestroy() {System.out.println("服务销毁了");super.onDestroy();}@Overridepublic boolean onUnbind(Intent intent) {System.out.println("服务解除了绑定");return super.onUnbind(intent);}}

记住配置service:

<service android:name="com.alan.bindservice.TestService" ></service>

布局就是三个按钮而已,还有一个就是IService接口,里面就只有一个方法。这样就实现了调用服务里面的方法 。

0 0
原创粉丝点击