Android-Activity的启动模式-IntentFlag

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"/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值