service activity同步通信

来源:互联网 发布:ubuntu samba权限配置 编辑:程序博客网 时间:2024/05/22 00:41
public class TestService extends Service {  
  
    @Override  
    public IBinder onBind(Intent intent) {  
        return new FirstBinder();  
    }  
      
    class FirstBinder extends Binder{  
          
        @Override  
        protected boolean onTransact(int code, Parcel data, Parcel reply,  
                int flags) throws RemoteException {  
            //接收Activity发送来的数据
            String str=data.readString();
            Log.i("t1",str);//处理Activity发送来的数据 
            reply.writeString("Service要发给Activity的数据");
            return super.onTransact(code, data, reply, flags);  
        }  
    }  
  

}  

/** 
 * Activity和Service进行数据交互,通过Binder里面的onTransact和transact方法进行实现 
 * 通过binder.transact(0, data, reply, 0)和onTransact是同步进行的
 */  
public class MainActivity extends Activity implements OnClickListener {  
    private Button mBtn_bindService=null;  
    private Button mBtn_sendReply=null;  
    private Binder mBinder=null;  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        mBtn_bindService=(Button)findViewById(R.id.btn_bindService);  
        mBtn_sendReply=(Button)findViewById(R.id.btn_sendReply);  
        mBtn_bindService.setOnClickListener(this);  
        mBtn_sendReply.setOnClickListener(this);  
    }  
      
 
    private ServiceConnection conn=new ServiceConnection() {  
        @Override  
        public void onServiceConnected(ComponentName name, IBinder service) {  
        //把service返回过来的IBinder对象赋值给当前对象里面的binder  
            MainActivity.this.mBinder=(Binder)service;
        }  
          
        @Override  
        public void onServiceDisconnected(ComponentName name) {  
              
        }  
    };
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_bindService:
  Intent intent=new Intent();  
           intent.setClass(MainActivity.this,TestService.class);  
           bindService(intent, conn, Service.BIND_AUTO_CREATE); 
break;


case R.id.btn_sendReply:
 Parcel data=Parcel.obtain();
           Parcel reply=Parcel.obtain();
           data.writeString("要发送给Service的数据 ");
           try {  
            mBinder.transact(0, data, reply, 0);
             //接收Service发送过来的数据  
               String str=reply.readString();
               System.out.println(str);  
           } catch (Exception e) {  
               e.printStackTrace();  
           }  
break;
}
}  
}  

0 0