应用内绑定服务例子

来源:互联网 发布:多益网络用户中心 编辑:程序博客网 时间:2024/06/03 20:18

绑定服务场景:应用内其他地方需要调用服务中的方法。

例子1,Binder中的所有方法都可以被调用:

public class BindService extends Service {    @Override    public IBinder onBind(Intent intent) {        return new ServiceBinder();    }    public class ServiceBinder extends Binder {        public void callServiceMethod() {            sayHello();        }    }    public void sayHello() {        System.out.println("Hello bindService!");    }}
服务要在manifest中注册。
调用:

public class MainActivity extends Activity {    private ServiceBinder mService;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        bind();        Button button = (Button) findViewById(R.id.button);        button.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                if (mService != null) {                    mService.callServiceMethod();                }            }        });    }    @Override    protected void onDestroy() {        super.onDestroy();        unBind();    }    private void bind() {        Intent service = new Intent(this, BindService.class);        bindService(service, mConnection, Context.BIND_AUTO_CREATE);    }    private void unBind() {        if (mConnection != null) {            unbindService(mConnection);        }        mService = null;    }    ServiceConnection mConnection = new ServiceConnection() {        @Override        public void onServiceDisconnected(ComponentName name) {            System.out.println("进程挂了或服务被异常杀死时调用");        }        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            mService = (ServiceBinder) service;            System.out.println("綁定成功");        }    };}

例子2,binder中有自己的私有方法不想被外部调用,则需要添加接口,把外部可以访问的方法写到接口中。

public interface IServiceBinder {    public void callServiceMethod();}

服务:

public class BindService extends Service {    @Override    public IBinder onBind(Intent intent) {        return new ServiceBinder();    }    public class ServiceBinder extends Binder implements IServiceBinder {        @Override        public void callServiceMethod() {            sayHello();        }        // 不想被外部调用的方法        private void sayGoodBye() {            System.out.println("bye bye BindService!");        }    }    public void sayHello() {        System.out.println("Hello BindService!");    }}

调用:

public class MainActivity extends Activity {    private IServiceBinder mService;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        bind();        Button button = (Button) findViewById(R.id.button);        button.setOnClickListener(new OnClickListener() {                        @Override            public void onClick(View v) {                if (mService != null) {                    mService.callServiceMethod();                }            }        });    }    private void bind() {        Intent service = new Intent(this, BindService.class);        bindService(service, mConn, Context.BIND_AUTO_CREATE);    }    private void unBind() {        if (mConn != null) {            unbindService(mConn);        }        mService = null;    }    protected void onDestroy() {        super.onDestroy();        unBind();    };    ServiceConnection mConn = new ServiceConnection() {        @Override        public void onServiceDisconnected(ComponentName name) {        }        @Override        public void onServiceConnected(ComponentName name, IBinder service) {            mService = (IServiceBinder) service;        }    };}

0 0
原创粉丝点击