一、Activity的启动模式
在清单文件AndroidManifest.xml中的<activity>标签中可以配置android:launchMode属性,用来控制Actvity的启动模式。
在Android系统中,我们创建的Activity是以栈的形式呈现的:
standard:每次调用startActivity(Intent intent)方法时,都会创建一个新的Activity放在栈顶。
singleTop:在启动Activity时,如果指定的Activity不在栈顶就创建Activity;如果栈顶已经存在要创建的Activity,则不再创建。
singleTask:如果要启动的Activity不存在则创建新的Activity,如果已存在要创建的Activity则直接跳转到指定的Activity,并将栈顶的Activity全部结束。
singleInstance:如果要启动的Activity不存在则创建新的Activity,如果已经存在要创建的Activity,则将指定的Activity移动到栈顶。
a.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="A_Activity" android:textSize="30sp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="openA" android:text="打开A" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="openB" android:text="打开B" /> </LinearLayout>
public class A_Activity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.a); } public void openA(View view) { startActivity(new Intent(this, A_Activity.class)); } public void openB(View view) { startActivity(new Intent(this, B_Activity.class)); } }
b.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="B_Activity" android:textSize="30sp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="openA" android:text="打开A" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="openB" android:text="打开B" /> </LinearLayout>
public class B_Activity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.b); } public void openA(View view) { startActivity(new Intent(this, A_Activity.class)); } public void openB(View view) { startActivity(new Intent(this, B_Activity.class)); } }
二、内存管理
Android系统在运行多个程序时,如果系统的资源不足,就会强制结束一些进程。而系统会选择哪些进程结束有着不同的优先级。以下情况被结束的优先级由高到低:
空:进程中所有的Activity都已经被销毁
后台:进程中还有一个处于停止状态的Activity
可见:进程中还有一个处于暂停状态的Activity
前台:进程中正在运行一个Activity