ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
>[info] 一个名称为Activity的Android应用程序,它由三个Activity组件**MainActivity** 、**SubActivitylnProcess**和**SubActivitylnNewProcess**组成,其中, **MainActivity**是**根Activity**, **SubActivitylnProcess**和**SubActivitylnNew Process**是**子Activity**。**SubActivitylnProcess与MainActivity运行在同一个进程中,而SubActivitylnNewProcess运行在一个独立的进程中。** 应用程序Activity的目录结构如下: ~~~ ~/Android/ packages /experimenta l /Activity ----AndroidManifest . xml ----Android.mk ----src -- - shy/luo/activity ----MainActi vi ty . java - -- SubActivityinProcess .java ---- SubActi vi tyinNewProcess. java ----res ----layout -main xml ---- sub.xml -一-- values ---- strings. xml ----drawable ----icon png ~~~ ### 各个文件的内容 #### 清单文件AndroidManifest **AndroidManifest.xml** ~~~ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="shy.luo.activity" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name" android:process="shy.luo.activity.mainprocess"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:label="@string/sub_activity" android:name=".SubActivityInProcess" android:process="shy.luo.activity.mainprocess"> <intent-filter> <action android:name="shy.luo.activity.subactivity.in.process"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> <activity android:label="@string/sub_activity" android:name=".SubActivityInNewProcess" android:process="shy.luo.activity.newprocess"> <intent-filter> <action android:name="shy.luo.activity.subactivity.in.new.process"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> </application> </manifest> ~~~ 这是应用程序Activity 的配置文件。由于在程序中使用到了三个Activity组件MainActivity 、SubActivitylnProcess和SubActivitylnNewProcess ,因此,我们就需要在这里对它们进行配置。 > 我们将MainActivity组件的**Action名称和Category名称分别设置为“android.intent.action.MAIN”和“android.intent. category. LAUNCHER”,使得它可以作为应用程序Activity的根Activity组件**。同时,我们将**SubActivitylnProcess**组件和**SubActivitylnNewProcess**组件的**Action名称**分别设置为**自定义值“shy.luo.activity.subactivity.in.process”和“shy.luo.activity.subactivity.in.new.process”**,因此,可以通过这两个名称来**隐式地启动它们**。此外,我们还将Main.Activity纽件和SubActivityinProcess组件的**android:process属性**设置为“**shy.luo.activity.mainprocess**”,以使它们可以**运行在同一个进程**中;而将**SubActivityinNewProcess组件的android: process属性设置为“shy.luo.activity.newprocess",以使它可以运行在另外一个进程中。** #### MainActivity MainActivity是应用程序Activity的根Activity组件,它的用户界面上有两个按钮,分别用来启动 SuhActivitylnProcess和SuhActivitylnNewProcess这两个子Activity。SuhActivitylnProcess和S由ActivitylnNewProcess的 组件名称分别被配置为“shy.luo.activity.SubActivityInProcess”和“shy.luo.activity.SubActivityInNewProcess”, 因此,第35行和第38行调用成员函数startActivity启动它们时,只需要分别指定这两个名称即可,而不需要知道它们是由哪一个类来实现的。 **MainActivity.java** ~~~ public class MainActivity extends Activity implements OnClickListener { private final static String LOG_TAG = "shy.luo.activity.MainActivity"; private Button startInProcessButton = null; private Button startInNewProcessButton = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); startInProcessButton = (Button)findViewById(R.id.button_start_in_process); startInNewProcessButton = (Button)findViewById(R.id.button_start_in_new_process); startInProcessButton.setOnClickListener(this); startInNewProcessButton.setOnClickListener(this); Log.i(LOG_TAG, "Main Activity Created."); } @Override public void onClick(View v) { if(v.equals(startInProcessButton)) { Intent intent = new Intent("shy.luo.activity.subactivity.in.process"); startActivity(intent); } else if(v.equals(startInNewProcessButton)) { Intent intent = new Intent("shy.luo.activity.subactivity.in.new.process"); startActivity(intent); } } } ~~~ 对应的布局文件**main.xml** ~~~ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center"> <Button android:id="@+id/button_start_in_process" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="@string/start_in_process" > </Button> <Button android:id="@+id/button_start_in_new_process" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="@string/start_in_new_process" > </Button> </LinearLayout> ~~~ **SubActivityInProcess.java** SubActivityInProcess是应用程序Activity 的一个子Activ即组件,它是由MainActivity组件启动起来的,当我们点击它的用户界面上的一个finish按钮时,就可以返回到MainActivity组件中。 ~~~ public class SubActivityInProcess extends Activity implements OnClickListener { private final static String LOG_TAG = "shy.luo.activity.SubActivityInProcess"; private Button finishButton = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sub); finishButton = (Button)findViewById(R.id.button_finish); finishButton.setOnClickListener(this); Log.i(LOG_TAG, "Sub Activity In Process Created."); } @Override public void onClick(View v) { if(v.equals(finishButton)) { finish(); } } } ~~~ **SubActivityInProcess**组件和**SubActivityInNewProcess**组件对应的布局文件**sub.xml** ~~~ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center"> <Button android:id="@+id/button_finish" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="@string/finish" > </Button> </LinearLayout> ~~~ 这是SubActivitylnProcess组件和SubActivitylnNewProcess组件的界面配置文件,它在屏幕中间显示一个按钮。 **SubActivityInNewProcess.java** SubActivitylnNewProcess是应用程序Activity的另外一个子Activity组件,它也是由MainActivity组件启动起来的,不过它是在一个新的进程中启动的,当我们点击它的用户界面的finish按钮时,同样可以返回到MainActivity组件中。 ~~~ public class SubActivityInNewProcess extends Activity implements OnClickListener { private final static String LOG_TAG = "shy.luo.activity.SubActivityInNewProcess"; private Button finishButton = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sub); finishButton = (Button)findViewById(R.id.button_finish); finishButton.setOnClickListener(this); Log.i(LOG_TAG, "Sub Activity In New Process Created."); } @Override public void onClick(View v) { if(v.equals(finishButton)) { finish(); } } } ~~~