Android开发:bindService的使用方法http://blog.csdn.net/zhou_wenchong/article/details/51302574bindService用于绑定一个服务。这样当bindService(intent,conn,flags)后,就会绑定一个服务。这样做可以获得这个服务对象本身,而用startService(intent)的方法只能启动服务。 bindService方式的一般过程:
大家好,又见面了,我是你们的朋友全栈君。
http://blog.csdn.net/zhou_wenchong/article/details/51302574
bindService用于绑定一个服务。这样当bindService(intent,conn,flags)后,就会绑定一个服务。这样做可以获得这个服务对象本身,而用startService(intent)的方法只能启动服务。
bindService方式的一般过程:
1.新建Service类BindService。在BindService类里新建内部类MyBinder,继承自Binder(Binder实现IBinder接口)。MyBinder提供方法返回BindService实例。
public class MyBinder extends Binder{
public BindService getService(){
return BindService.this;
}
}
实例化MyBinder得到mybinder对象;
重写onBind()方法:
@Override
public IBinder onBind(Intent intent) {
return mybinder;
}
2.在Activity里,实例化ServiceConnection接口的实现类,重写onServiceConnected()和onServiceDisconnected()方法
ServiceConnection conn=new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
3.在Activity的onCreate()方法里,新建Intent,并绑定服务
Intent intent=new Intent(MainActivity.this,BindService.class);
bindService(intent, conn,BIND_AUTO_CREATE);
4.在Activity的onDestroy里面,添加
unbindService(conn);
如果不加这一步,就会报Android.app.ServiceConnectionLeaked: ******.MainActivity has leaked ServiceConnection的异常。
bindService()的执行过程如下:
bindService(intent,conn,flag)->Service:onCreate()->Service:onBind()->Activity:onServiceConnected()
code
- 1:调用者
-
- package com.zhf.local;
-
- import android.app.Activity;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.Intent;
- import android.content.ServiceConnection;
- import android.os.Bundle;
- import android.os.IBinder;
-
-
-
-
-
-
-
- public class LocalServiceActivity extends Activity {
-
- private MyService myService;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- Intent intent = new Intent(this, MyService.class);
- bindService(intent, connection, Context.BIND_AUTO_CREATE);
- }
-
- private ServiceConnection connection = new ServiceConnection() {
-
- @Override
- public void onServiceDisconnected(ComponentName name) {
- myService = null;
- }
-
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- myService = ((MyService.MyBinder) service).getService();
- System.out.println(“Service连接成功”);
-
- myService.excute();
- }
- };
-
- protected void onDestroy() {
- super.onDestroy();
- unbindService(connection);
- };
- }
-
- 2:服务者
-
- package com.zhf.local;
-
- import android.app.Service;
- import android.content.Intent;
- import android.os.Binder;
- import android.os.IBinder;
-
- public class MyService extends Service {
- private final IBinder binder = new MyBinder();
-
- @Override
- public IBinder onBind(Intent intent) {
- return binder;
- }
-
- public class MyBinder extends Binder {
- MyService getService() {
- return MyService.this;
- }
- }
-
- public void excute() {
- System.out.println(“通过Binder得到Service的引用来调用Service内部的方法”);
- }
-
- @Override
- public void onDestroy() {
-
- super.onDestroy();
- }
-
- @Override
- public boolean onUnbind(Intent intent) {
-
- System.out.println(“调用者退出了”);
- return super.onUnbind(intent);
- }
- }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133436.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...