在Android系统中,一个application的所有Activity默认有一个相同的affinity(亲密关系,相似之处)。也就是说同一个应用程序的的所有Activity倾向于属于同一个task。但是我们并不能说Android里一个应用程序只有一个任务栈。笔者今天针对当taskAffinity不同时,四种launchMode下在打开一个新的Activity时是否会建立一个新的任务栈做了实验。 基本的代码如下: AndroidManifest.xml: MainActivity的代码 package com.example.testlaunchmode; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; public class MainActivity extends Activity { private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = (TextView) findViewById(R.id.tv); tv.setText(this.toString()+"\ntaskId="+this.getTaskId()); } public void onJump(View view) { Intent intent = new Intent(this, ActivityTest.class); startActivity(intent); } @Override protected void onNewIntent(Intent intent) { Log.d(TAG, "onNewIntent: intent="+intent); } } ActivityTest的代码和MainActivity类似,我就不贴出来了。 1. standard模式: standard模式是默认模式。在该模式下,Activity可以拥有多个实例,并且这些实例既可以位于同一个task,也可以位于不同的task。 代码如上面所示,没有改动,运行结果如下: 点击button后 可以看出,MainActivity和ActivityTest的taskAffinity并不相同,但是它们被放入同一个任务栈中。 2. singleTop模式 singleTop模式下,在同一个task中,如果存在该Activity的实例,并且该Activity实例位于栈顶(即,该Activity位于前端),则调用startActivity()时,不再创建该Activity的示例;而仅仅只是调用Activity的onNewIntent()。否则的话,则新建该Activity的实例,并将其置于栈顶。 仅仅改动AndroidManifest.xml文件: 运行结果: 点击button后: 可以看出和standard模式一样,虽然MainActivity和ActivityTest的taskAffinity不相同,但是它们仍然被放入同一个任务栈中。 3.singleTask模式: 这个模式笔者想先贴代码和结果: 运行结果: 由上面的结果可以很明显的看到ActivityTest打开时被放到了一个新的任务栈中,成为新的任务栈的栈底元素,也就是文档中所说的root activity。这时最新的任务栈成为唯一前台任务栈,而原来的MainActivity所在的任务栈成为众多后台任务栈中的一个。 实验做到这里笔者产生了一个新的疑问:如果两个Activity的taskAffinity相同,还会被这样吗? 因此笔者把两个Activity的taskAffinity改成一样的再次运行:
结果: 显然这样的结果和文档中给出的-A " 文档这是红果果的自相矛盾啊~QUQ 好扒,总结一下是这样的: 以A启动B来说 5. singleInstance模式 singleInstance,顾名思义,是单一实例的意思,即任意时刻只允许存在唯一的Activity实例! 显然这和文档的描述是相符的~ 注意:standard和singleTop模式下被启动的Activity的实例都可能不只一个,但是singleTask和和singleInstance都是只有一个实例存在的。区别是: 1.A " 2.However, a " |
|