У меня есть метод quit, который делает это:
public void quitFinalize(ServicedActivity actCtx)
{
for (ServicedActivity act : mRunningActivities)
launchActivity(actCtx, new Intent(mAppCtx, act.getClass()).setAction("--"));
}
Проверено, что mRunningActivities в порядке. Он состоит из всех действий в моей задаче, которые были созданы, а не уничтожены. Все действия наследуются от:
public class ServicedActivity extends FragmentActivity implements OnClickListener
{
...
@Override
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
if (/*Intent.ACTION_SCREEN_OFF*/"--".equals(intent.getAction())) // used for quitting the game
{
finish();
}
}
...
}
Я заметил, что для 2 действий в наборе механизм работает нормально. Однако для трех действий Android 4.0.3 решает, что он должен запустить (создать) еще один экземпляр одного из действий в наборе (похоже, ему особенно нравится запускать одно определенное действие, а не любое). и они заканчивают их все (таким образом, 4 уничтоженных действия вместо исходных 3)
Я уверен, что это не я создал эту активность непреднамеренно - вся моя логика launchActivity фильтруется с помощью метода, который добавляет флаг FLAG_ACTIVITY_REORDER_TO_FRONT к Intent, поэтому я не могу получить два экземпляра одного и того же класса Activity. Это должна быть ОС, которая создает его заново.
Также пробовал без свойства файла манифеста android:launchMode="singleTop" - это похоже на все действия в приложении. То же самое.
Что здесь происходит ? вышеприведенный метод onNewIntent() срабатывает 3 раза, как и ожидалось, но в середине Android создает новую активность, а затем сразу же завершает ее.
Спасибо