Activity的启动模式-IntentFlag
Android:taskAffinity
指出它希望进入的task
如果一个Activity没有显示的指名该Activity的taskAffinity,那么它的这个属性就等于Application指明的taskAffinity
如果Application也没有指名,那么该taskAffinity的值就等于包名
Task也有自己的affinity属性,它的值等于它的根Activity的taskAffinity的值
IntentFlag的常用值
1.FLAG_ACTIVITY_NEW_TASK
系统会寻找或创建一个新的task来放置目标Activity,寻找时依据目标Activity的taskAffinity属性进行匹配,如果找到一个task的taskAffinity与之相同,就将目标Activity压入此task中,如果查找无果,则创建一个新的task,并将该task的taskAffinity设置为目标Activity的taskAffinity,将目标Activity放置于此task
2.FLAG_ACTIVITY_SINGLE_TOP
当task中存在目标Activity实例并且位于栈的顶端时,不再创建一个新的,直接利用这个实例
3.FLAG_ACTIVITY_CLEAR_TOP
如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都出栈
4.FLAG_ACTIVITY_REORDER_TO_FRONT
如果栈里已经存在,则将它拿到栈顶,不会启动新Activity
设置IntentFlag的方法
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
package com.maizi.launchmode;
import android.app.Activity;
import andorid.os.Bundle;
public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(saveInstanceState);
setContentView(R.layout.activity_main);
Log.e("MainActivity", "当前处于的taskId = "+getTaskId());
Button bthStart = (Button) findViewById(R.id.bth_start);
bthStart.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
//指定IntentFlag来启动SecondActivity;
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
}
}
package com.maizi.launchmode;
import android.app.Activity;
import android.os.Bundle;
public class SecondActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(saveInstanceState);
setContentView(R.layout.activity_second);
Log.e("SecondActivity", "当前处于的taskId = "+getTaskId());
}
}
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二个Activity"/>
<activity
android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SecondActivity" />
<Button
android:id="@+id/bth_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="通过IntentFlag启动第二个Activity"/>