Не понимаете стека активности? - PullRequest
1 голос
/ 03 декабря 2009

У меня проблемы с действиями, когда они уходят в фоновом режиме. У меня есть два действия, A и B. Только A может запустить B (манифест скопирован ниже). Вот что я делаю:

  1. Запустите приложение из ящика приложения (действие A)
  2. На A есть кнопка для запуска B, теперь отображается B.
  3. Нажмите клавишу Home, мое приложение теперь в фоновом режиме.
  4. Снова перейдите в ящик приложений, нажмите значок моего приложения.
  5. Вместо возобновления в ActivityB, Activity A запускается снова. Почему?
  6. Если я сейчас нажму клавишу Назад, мне отобразится старая активность. Что?

Это очень запутанно. Как будто Android знает, что мое приложение запущено, и помещает новый экземпляр A поверх старого экземпляра B. Я бы просто ожидал, что приложение будет приостановлено на месте, и всякий раз, когда пользователь снова нажимает на значок приложения, оно просто начинает с того места, на котором оно остановилось (в данном случае просто покажите B снова!). Ниже приведен манифест, а классы активности для этого теста полностью пусты (за исключением A, у которого есть кнопка для запуска B).

<activity android:name=".ActivityA"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".ActivityB"
          android:label="@string/app_name">
        <intent-filter>
        <!-- 
            <action android:name="android.intent.action.VIEW" />
             -->
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

Ответы [ 3 ]

2 голосов
/ 03 декабря 2009

Если бы мне пришлось угадать, потому что внутри ящика вашего приложения находится ваша ссылка .apk для вашей Программы A. Независимо от того, запущен ли уже B, INTENT приложения, если оно выбрано, предназначено для запуска Программы A.

Я только немного прочитал об Android, поэтому не могу сказать со 100% уверенностью, но это мое предположение.

Надеюсь, это поможет.

EDIT:

Удерживая клавишу «Домой» на телефоне Android, показывает список фоновых приложений. Можете ли вы сделать то же самое внутри эмулятора и посмотреть, появляется ли программа B? Или такая же проблема возникает?

Прочитав что-то вокруг Google, я наткнулся на этот вот небольшой фрагмент:

Все действия в задании перемещаются вместе как единое целое. Вся задача (весь стек действий) может быть выведена на передний план или отправлена ​​на задний план. Предположим, например, что текущая задача имеет четыре действия в своем стеке - три под текущей деятельностью. Пользователь нажимает клавишу HOME, переходит к панели запуска приложений и выбирает новое приложение (фактически, новую задачу). Текущая задача переходит в фоновый режим и отображается корневая активность для новой задачи. Затем, через короткий промежуток времени, пользователь возвращается на домашний экран и снова выбирает предыдущее приложение (предыдущее задание). Эта задача со всеми четырьмя действиями в стеке продвигается вперед. Когда пользователь нажимает клавишу BACK, на экране не отображается активность, которую пользователь только что покинул (корневая активность предыдущей задачи). Скорее, действие в верхней части стека удаляется, и отображается предыдущее действие в той же задаче.

Надеюсь, это направит вас в правильном направлении

1 голос
/ 03 декабря 2009

Я испытываю эту ошибку:

http://code.google.com/p/android/issues/detail?id=2373#makechanges

Спасибо за вашу помощь, это было так запутанно.

0 голосов
/ 09 ноября 2010

Вы установили следующее свойство в определении xml своей деятельности?

android:launchMode="singleTop"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...