安卓的组件的可以指定运行在不同的进程之中,而一个进程只能拥有一个Application。
下面进行测试。
import android.app.Application;
import android.util.Log;
/**
* Created by Administrator on 2015/8/15.
*/
public class App extends Application {
public static String str = "string";
@Override
public void onCreate() {
super.onCreate();
Log.d("MyApp", "onCreate()");
}
}
新建一个App类,继承Application类,并且有个静态变量str;
新建三个Activity
MainActivity
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.start_btn).setOnClickListener(this);
findViewById(R.id.start_btn1).setOnClickListener(this);
App.str = new String("this is a new string");
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.start_btn:
startActivity(new Intent(this,NewProcessActivity.class));
break;
case R.id.start_btn1:
startActivity(new Intent(this,SameProcessActivity.class));
break;
}
}
}
NewProcessActivity
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
/**
* Created by Administrator on 2015/8/15.
*/
public class NewProcessActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_process);
findViewById(R.id.finish_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("MyApp", "string is " + App.str);
}
});
}
}
最后一个SameProcessActivity
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
/**
* Created by Administrator on 2015/8/15.
*/
public class SameProcessActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_process);
findViewById(R.id.finish_btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("MyApp", "string is " + App.str);
}
});
}
}
manifest文件
<application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".NewProcessActivity"
android:process="com.example.administrator.mulprocesstest.newprocess"></activity>
<activity android:name=".SameProcessActivity"></activity>
</application>
在Manifest文件中指定Activity运行在不同的进程中
接下来查看运行结果
程序第一次启动时,会新建一个App,调用App类的onCreate();
接着我们启动NewProcessActivity
发现又调用了一次onCreate()。接着我们输出App.str;;
在MainActivity中,我们把App.str的值改为"this is a new string"
原字符串为"string"
在NewProcessActivity中,我们输出的结果为
发现App.str的值是没有变化的。
综上:每个进程对应一个Application。