Возможно, ошибка была в startActivity
.Ошибка: onNewIntent не вызывается для singleTop-активности с Intent.FLAG_ACTIVITY_NEW_TASK
Устанавливая деятельности быть singleTop
с различными taskAffinity
в AndroidManifest.xml и используя Intent.FLAG_ACTIVITY_NEW_TASK
при вызове startActivity
, два вида деятельности могут быть созданы в двух задач (одна деятельности на задачу).
Вызов startActivity
снова вернется к первому действию/задаче и вызывается onNewIntent
. Однако при вызове startActivity
четвертое время вернется ко второму действию/задаче, но onNewIntent
не вызывается.
Единственная разница между двумя задачами - их taskAffinity
. Так или иначе, наблюдается асимметричное поведение.
Однако, если используется Intent.FLAG_ACTIVITY_SINGLE_TOP
, то onNewIntent
называется как ожидалось.
Похоже, что singleTop
в AndroidManifest.xml не совпадает с Intent.FLAG_ACTIVITY_SINGLE_TOP
в Intent
.
public class ActivityA extends Activity implements OnClickListener { private String tag; @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); tag = getClass().getName(); Log.v(tag, "onCreate()"); setContentView(R.layout.main); Button button = (Button)findViewById(R.id.button); button.setText(tag.endsWith("ActivityA") ? "Activity B" : "Activity A"); button.setOnClickListener(this); } @Override public void onClick(View v) { Intent intent; int flags = Intent.FLAG_ACTIVITY_NEW_TASK // | Intent.FLAG_ACTIVITY_SINGLE_TOP ; Log.v(tag, "onClick()"); intent = new Intent(this, tag.endsWith("ActivityA") ? ActivityB.class : ActivityA.class); intent.setFlags(flags); startActivity(intent); } @Override protected void onNewIntent(Intent intent) { Log.v(tag, "onNewIntent()"); } }
public class ActivityB extends ActivityA { }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".ActivityA" android:launchMode="singleTop" android:label="Activity A"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ActivityB" android:launchMode="singleTop" android:label="Activity B" android:taskAffinity="activity.B"> </activity> </application> </manifest>