安卓学习开发笔记

Android Service和Activity的相互通信

2017-09-06  本文已影响0人  侯蛋蛋_

Activity向Service通信

第一种方式:通过MyBinder方式调用Service方法
步骤

BanZhengService

public class BanZhengService extends Service {

    //把我定义的中间人对象返回 
    @Override
    public IBinder onBind(Intent intent) {
        return new MyBinder();
    }
    //办证的方法
    public void banZheng(int money){
        if (money>1000) {
            Toast.makeText(getApplicationContext(), "我是领导 把证给你办了", 1).show();
        }else {
            Toast.makeText(getApplicationContext(), "这点钱 还想办事....", 1).show();
        }
    }
    //[1]定义中间人对象(IBinder)
    
    public class MyBinder extends Binder{
        
        public void callBanZheng(int money){
            //调用办证的方法
            banZheng(money);
        }}}
public class MainActivity extends Activity {

    private MyConn conn;
    private MyBinder myBinder;//我定义的中间人对象
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Intent intent = new Intent(this,BanZhengService.class);
        //连接服务 
        conn = new MyConn();
        bindService(intent, conn, BIND_AUTO_CREATE);
        }
    //点击按钮调用服务里面办证的方法
    public void click(View v) {
        
        myBinder.callBanZheng(10000000);
    }
    
    //监视服务的状态
    private class MyConn implements ServiceConnection{

        //当服务连接成功调用
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //获取中间人对象
            myBinder = (MyBinder) service;
        }
        //失去连接
        @Override
        public void onServiceDisconnected(ComponentName name) {
            
        }}
    @Override
    protected void onDestroy() {
        //当activity 销毁的时候 解绑服务 
        unbindService(conn);
        super.onDestroy();
    }}

第二种方式:通过接口Iservice调用Service方法

使用借口调用service和直接调用其实本质都是一样的,只不过多了借口一个步骤,

即实现步骤

public interface Iservice {

    //把领导想暴露的方法都定义在接口里
    public void callBanZheng(int money);
//  public void callPlayMaJiang();

这里就写一下不同的地方,其他都和上面的第一种一样
MainActivity


    //监视服务的状态
    private class MyConn implements ServiceConnection{
        //当服务连接成功调用
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //获取中间人对象
            myBinder = (Iservice) service;
        }
        //失去连接
        @Override
        public void onServiceDisconnected(ComponentName name) {
            
        }
    }
    @Override
    protected void onDestroy() {
        //当activity 销毁的时候 解绑服务 
        unbindService(conn);
        super.onDestroy();
    }
    
}
上一篇 下一篇

猜你喜欢

热点阅读