1. ホーム
  2. アンドロイド

FLAG_ACTIVITY_NEW_TASKとtaskAffinityの関係

2022-03-20 20:23:55

この2つの項目を組み合わせることで、Intent使用時に新しいタスクスタックを開始するかどうかを制御することができます。実際にどのように連携して新しいタスクスタックを開始するのか、その例を示します。

I. taskAffinityの設定のみ。

MainActivity.java。

package com.example.administrator.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class MainActivity extends AppCompatActivity {
    public static final String TAG = "yayun";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate: taskId" + getTaskId());
        setContentView(R.layout.activity_main);
    }

    public void launch(View view) {
        Intent intent = new Intent();
        intent.setAction("yayun");
        
        startActivity(intent);
    }
}


Intent量を暗黙のうちに開始する。

ActivityTest.java。

package com.example.administrator.myapplication;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

TextView; /**
 TextView; /** * Created by Administrator on 2016/7/31.
 //
public class ActivityTest extends Activity {
    public static final String TAG = "yayun";
    private TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate: taskId" + getTaskId());
        setContentView(R.layout.activity1_layout);
        mTextView = (TextView) findViewById(R.id.tv);
    }

}


AndroidMainifest.xml。

<?xml version="1.0" encoding="utf-8"? >
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.administrator.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <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=".ActivityTest"
            android:taskAffinity=".yayun">
            <intent-filter>
                <action android:name="yayun" />

                <category android:name="android.intent.category.DEFAULT" />

            </intent-filter>
        </activity>

    </application>

</manifest>





暗黙のスタートIntentは、ああ、一般的にシステムのIntentは、ブラウザを起動するように、暗黙のスタート、SMSエディタを開始し、適切なアクションを設定します。

ActivityTestにtaskAffinityプロパティが設定されています。

この時点でプログラムを実行します。

ボタンをクリックすると、ActivityTestにジャンプします。

この時点でログメッセージを見てください。

これはtaskIdです。

2つ目は、ダブルビッチとウォール。

MainActivity起動時にFlagを追加する ie.

  public void launch(View view) {
        Intent intent = new Intent();
        intent.setAction("yayun");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }

この時点で再スタート。





2つのtaskIdは異なっています。

FLAG_ACTIVITY_NEW_TASKは、起動時に新しいタスク・スタックを開くかどうかを動的に制御できることがわかりますので、より柔軟性が高いのではないでしょうか?

誰かが起動したときに新しいタスク・スタックを開きたい場合、その人が起動時にFLAG_ACTIVITY_NEW_TASKを追加することに同意しなければならず、設定ファイルでそれを設定する必要があります。

taskAffinity、両刀使いの組み合わせは無敵です。

第三に、ただFLAG_ACTIVITY_NEW_TASK 、これは自分でテストすることができ、この時点でも同じタスクスタック:を追加します。