>[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();
}
}
}
~~~
- 第一章 准备知识
- 第二章 硬件抽象层
- 第三章 智能指针
- 第四章 Logger日志系统
- 第五章 Binder进程间通信系统
- 第六章 Ashmem匿名共享内存系统
- 第七章 Activity组件的启动过程
- 7.1 Activity组件应用实例
- 7.2 根Activity组件的启动过程
- 第八章 Service组件的启动过程
- 第九章 Android系统广播机制
- 第十章 Content Provider组件的实现原理
- 第十一章 Zygote和System进程的启动过程
- 第十二章 Android应用程序进程的启动过程
- 第十三章 Android应用程序的消息处理机制
- 第十四章 Android应用程序的键盘消息处理机制
- 第十五章 Android应用程序线程的消息循环模型
- 第十六章 Android应用程序的安装和显示过程
- 16.1 Android应用程序的安装过程
- 16.2 Android应用程序的显示过程