Android之使用Bundle进行IPC详解

Android之使用Bundle进行IPC详解,第1张

概述一、Bundle进行IPC介绍四大组件中的三大组件(Activity、Service、Receiver)都是支持在Intent中传递Bundle数据的,由于Bundle实现了Parcelable接口,所以它可以方便地在不同的进程之间传输。当然,传输的数据必须

一、Bundle进行IPC介绍

四大组件中的三大组件(Activity、Service、Receiver)都是支持在Intent中传递Bundle数据的,由于Bundle实现了Parcelable接口,所以它可以方便地在不同的进程之间传输。当然,传输的数据必须能够被序列化,比如基本类型、实现了Parcelable接口的对象、实现了Serializable接口的对象以及一些AndroID支持的特殊对象,具体内容可以看Bundle这个类,就可以看到所有它支持的类型。Bundle不支持的类型无法通过它在进程间传递数据。

二、使用方法

1.打包数据发送

Intent intent1 = new Intent(MainActivity.this,ThirdActivity.class);Bundle bundle = new Bundle();bundle.putCharSequence("name","zhangmiao");bundle.putInt("age",20);intent1.putExtras(bundle);startActivity(intent1); 

2.接受数据

Intent intent = getIntent();Bundle bundle = intent.getExtras();String name = bundle.getString("name");int age = bundle.getInt("age"); 

3.在AndroIDManifest.xml中开启多进程

<activity  ...  androID:process=":remote" /> 

三、小案例

1.修改activity_main.xml文件

<?xml version="1.0" enCoding="utf-8"?><linearLayout  xmlns:androID="http://schemas.androID.com/apk/res/androID"  xmlns:tools="http://schemas.androID.com/tools"  androID:layout_wIDth="match_parent"  androID:layout_height="match_parent"  androID:fitsSystemwindows="true"  tools:context="com.zhangmiao.ipcdemo.MainActivity"  androID:orIEntation="vertical"  >  <TextVIEw    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:layout_gravity="center_horizontal"    androID:text="Bundler">  </TextVIEw>  <button    androID:ID="@+ID/bundler_button"    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:text="send message">  </button></linearLayout> 

2.添加activity_third.xml文件

<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"  androID:layout_wIDth="match_parent"  androID:layout_height="match_parent"  androID:orIEntation="vertical">  <TextVIEw    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:layout_gravity="center_horizontal"    androID:text="at activity Third" />  <TextVIEw    androID:ID="@+ID/textVIEw1"    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:text="Activity Third" /></linearLayout> 

3.添加ThirdActivity类

package com.zhangmiao.ipcdemo;import androID.app.Activity;import androID.content.Intent;import androID.os.Bundle;import androID.Widget.TextVIEw;/** * Created by zhangmiao on 2016/12/27. */public class ThirdActivity extends Activity {  @OverrIDe  protected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_third);    Intent intent = getIntent();    Bundle bundle = intent.getExtras();    String name = bundle.getString("name");    int age = bundle.getInt("age");    TextVIEw textVIEw = (TextVIEw) findVIEwByID(R.ID.textVIEw1);    textVIEw.setText("name:" + name + ",age:" + age);  }} 

4.修改MainActivity类

package com.zhangmiao.ipcdemo;import androID.content.Componentname;import androID.content.Context;import androID.content.Intent;import androID.content.ServiceConnection;import androID.os.Bundle;import androID.os.Handler;import androID.os.IBinder;import androID.os.Message;import androID.os.Messenger;import androID.os.remoteexception;import androID.support.v7.app.AppCompatActivity;import androID.util.Log;import androID.vIEw.VIEw;import androID.Widget.button;import androID.Widget.TextVIEw;import java.io.file;import java.io.fileOutputStream;import java.io.IOException;import java.io.ObjectOutputStream;import java.io.Serializable;public class MainActivity extends AppCompatActivity {  private static final String TAG = "MainActivity";  @OverrIDe  protected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_main);    button button = (button) findVIEwByID(R.ID.bundler_button);    button.setonClickListener(new VIEw.OnClickListener() {      @OverrIDe      public voID onClick(VIEw v) {        Intent intent1 = new Intent(MainActivity.this,ThirdActivity.class);        Bundle bundle = new Bundle();        bundle.putCharSequence("name","zhangmiao");        bundle.putInt("age",20);        intent1.putExtras(bundle);        startActivity(intent1);      }    });  }} 

5.修改AndroIDManifest.xml文件

<?xml version="1.0" enCoding="utf-8"?><manifest xmlns:androID="http://schemas.androID.com/apk/res/androID"  package="com.zhangmiao.ipcdemo">  <uses-permission androID:name="androID.permission.WRITE_EXTERNAL_STORAGE" />  <application    androID:allowBackup="true"    androID:icon="@mipmap/ic_launcher"    androID:label="@string/app_name"    androID:supportsRtl="true"    androID:theme="@style/Apptheme">    <activity      androID:name=".MainActivity"      androID:label="@string/app_name"      androID:launchMode="standard"      androID:theme="@style/Apptheme.NoActionbar">      <intent-filter>        <action androID:name="androID.intent.action.MAIN" />        <category androID:name="androID.intent.category.LAUNCHER" />      </intent-filter>    </activity>    <activity      androID:name=".ThirdActivity"      androID:configChanges="screenLayout"      androID:label="@string/app_name"      androID:process=":remote" />  </application></manifest> 

完整代码下载地址:demo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android之使用Bundle进行IPC详解全部内容,希望文章能够帮你解决Android之使用Bundle进行IPC详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1147312.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存