第10篇.activity和service之间的通信

一、同一个apk内部,activity和service的通信

项目要求,进入activity启动service,并要求servcice能够传递数据给activity,activity能够交互service,下面列出大致思路:

1、activity在service启动之前,先构建个service对象,并向其传递一个handler

2、activity开启服务,activity绑定服务,并把绑定之后返回的service值存储到上一步中的service对象去

3、service通过handler向activity传递数据

这里面比较麻烦的就是在绑定service之前,activity就需要先构建一个service对象,并传递数据给他,在service起来之后主动和activity通信,之后在绑定服务的时候对这个service对象重新赋值,否者会在某些activity调用service方法的时候出现空指针


service里面:

    private final IBinder mBinder = new LocalBinder();

    public class LocalBinder extends Binder {
        RecordServer getService() {
            // Return this instance of LocalService so clients can call public methods
            return RecordServer.this;
        }
    }

activity里面

    private static RecordServer mRecordServer;
    private static boolean mBound = false;

    public void onResume()
    {
        Intent intent = new Intent(this, RecordServer.class);  
        bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
	startService(intent);
        super.onResume();
    }
	 private ServiceConnection mConnection = new ServiceConnection() {  
	     @Override  
	     public void onServiceConnected(ComponentName className,  
	             IBinder service) {  
	         // 已经绑定了LocalService,强转IBinder对象,调用方法得到LocalService对象  
	         LocalBinder binder = (LocalBinder) service;  
	         mRecordServer = binder.getService();  
	         mBound = true;  
	     }  

	     @Override  
	     public void onServiceDisconnected(ComponentName arg0) {  
	    	 mRecordServer.SetHandler(null);
	         mBound = false;  
	     }  
	 }; 


二、不在同一个apk里面的相互通信



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值