在不同进程中的两个活动的内存空间

时间:2016-12-19 14:39:12

标签: android process multiprocessing

在不同进程中运行的两个Activity是否共享内存空间? Android文档中的Here表示它们具有单独的内存空间。

但假设我们必须Activity FirstActivity SecondActivity 。在清单中,android:process属性被分配给 SecondActivity ,以使其在单独的进程上运行。并假设 FirstActivity 有一个名为 A 的公共静态字段。

我使用startActivity()方法从 FirstActivity 开始 SecondActivity ,我可以访问 FirstActivity.A 字段并读取其值这表明他们共享了内存空间。 (但他们在不同的流程中运行)

编辑以下是代码:

的AndroidManifest.xml

<application>

    <activity android:name=".FirstActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".SecondActivity"
        android:process="another_process">

    </activity>

</application>

FirstActivity

public class FirstActivity extends Activity {

    public static int A = 11111;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);

        Intent intent = new Intent(this, SecondActivity.class);
        startActivity(intent);
    }
}

SecondActivity

public class SecondActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gateway);

        Log.i("SecondActivity", "A = " + FirstActivity.A); // here
    }
}

发生了什么事?只有当两个Activity从不同的应用程序运行时,是否有单独的内存空间?为什么可以从 SecondActivity

访问 A 变量

1 个答案:

答案 0 :(得分:1)

  

发生了什么?

你想知道为什么常数是常数。

  

仅在两个活动从不同的应用程序运行时才有单独的内存空间

没有。您的两个活动在不同的进程中运行。但是,这两个进程具有相同的代码,因为它是相同的应用程序。并且,作为常量的A实际上是代码的一部分。

  

为什么可以从SecondActivity访问A变量?

因为它们都有相同的代码。