1. 使用Bundle 传输数据
Android中的四大组件中,其中有三大组件(Activity,Service,Receiver)都支持Intent中传递Bundle数据,如果看其源码,会发现其也是实现了Parcelable接口,所以其能够在不同进程中传输。2.文件共享
将对象序列化之后保存到文件中,在通过反序列,将对象从文件中读取。
/** * 写入序列化对象 */ public void wirte() { Book book = new Book(); book.bookId = 1; book.bookName = "si"; try { // 构造序列化输出字节流 ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream(PATH)); // 序列化对象 oos.writeObject(book); // 关闭流 oos.close(); } catch (Exception e) { e.printStackTrace(); } System.out.println(book); }
public void read() { Book book = null; try { // 创建序列化读取字节流 ObjectInputStream ois = new ObjectInputStream(new FileInputStream( MainActivity.PATH)); // 反序列化(读取)对象 book = (Book) ois.readObject(); // 关闭流 ois.close(); } catch (Exception e) { e.printStackTrace(); } System.out.println(book); }
3. Messenger信使
服务端
- 创建Service
- 构造Handler对象,实现handlerMessage方法。
- 通过Handler对象构造Messenger信使对象。
- 通过Service的onBind()返回信使中的Binder对象。
-
public class MessengerService extends Service { /** * 构建handler 对象 */ public static Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { // 接受客户端发送的消息 String msgClient = msg.getData().getString("msg"); Log.i("messenger","接收到客户端的消息--"+msgClient); }; }; // 通过handler 构建Mesenger 对象 private final Messenger messenger = new Messenger(handler); @Override public IBinder onBind(Intent intent) { // 返回binder 对象 return messenger.getBinder(); } }
客户端
- 创建Actvity
- 绑定服务
- 创建ServiceConnection,监听绑定服务的回调。
- 通过onServiceConnected()方法的参数,构造客户端Messenger对象
- 通过Messenger向服务端发送消息。
-
public class MessengerActivity extends AppCompatActivity { /** * Messenger 对象 */ private Messenger mService; private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { // IBinder 对象 // 通过服务端返回的Binder 对象 构造Messenger mService = new Messenger(service); Log.i("messenger", "客户端以获取服务端Messenger对象"); } @Override public void onServiceDisconnected(ComponentName name) { } }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_messenger); // 启动服务 Intent intent = new Intent(this, MessengerService.class); bindService(intent, conn, BIND_AUTO_CREATE); } /** * 布局文件中添加了一个按钮,点击该按钮的处理方法 * @param view */ public void send(View view) { try { // 向服务端发送消息 Message message = Message.obtain(); Bundle data = new Bundle(); data.putString("msg", "lalala"); message.setData(data); // 发送消息 mService.send(message); Log.i("messenger","向服务端发送了消息"); } catch (Exception e) { e.printStackTrace(); } } }
我们是通过Message作为媒介去携带数据的。但是,Message的obj 并没有实现序列化(实现Serializable或Parcelable),也就是其不能保存数据。必须使用message.setData()方法去传入一个Bundle对象,Bundle中保存需要传入的数据。
客户端向服务端发送消息
服务端:
public class MessengerService extends Service { /** * 构建handler 对象 */ public static Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { // 接受客户端发送的消息 String msgClient = msg.getData().getString("msg"); Log.i("messenger", "接收到客户端的消息--" + msgClient); // 获取客户端Messenger 对象 Messenger messengetClient = msg.replyTo; // 向客户端发送消息 Message message = Message.obtain(); Bundle data = new Bundle(); data.putString("msg", "ccccc"); message.setData(data); try { // 发送消息 messengetClient.send(message); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } }; }; // 通过handler 构建Mesenger 对象 private final Messenger messenger = new Messenger(handler); @Override public IBinder onBind(Intent intent) { // 返回binder 对象 return messenger.getBinder(); } }
客户端
public class MessengerActivity extends AppCompatActivity { /** * Messenger 对象 */ private Messenger mService; private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { // IBinder 对象 // 通过服务端返回的Binder 对象 构造Messenger mService = new Messenger(service); Log.i("messenger", "客户端以获取服务端Messenger对象"); } @Override public void onServiceDisconnected(ComponentName name) { } }; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_messenger); // 启动服务 Intent intent = new Intent(this, MessengerService.class); bindService(intent, conn, BIND_AUTO_CREATE); } /** * 布局文件中添加了一个按钮,点击该按钮的处理方法 * @param view */ public void send(View view) { try { // 向服务端发送消息 Message message = Message.obtain(); Bundle data = new Bundle(); data.putString("msg", "lalala"); message.setData(data); // ----- 传入Messenger 对象 message.replyTo = messengerClient; // 发送消息 mService.send(message); Log.i("messenger","向服务端发送了消息"); } catch (Exception e) { e.printStackTrace(); } } /** * 构建handler 对象 */ public static Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { // 接受服务端发送的消息 String msgService = msg.getData().getString("msg"); Log.i("messenger","接收到服务端的消息--"+msgService); }; }; // 通过handler 构建Mesenger 对象 private final Messenger messengerClient = new Messenger(handler); }
4.AIDL
5.ContentProvider
6.Socket
转载:http://blog.csdn.net/jdsjlzx/article/details/51973813