Запуск деятельности в ее текущем состоянии - PullRequest
3 голосов
/ 18 мая 2010

Я пытаюсь сделать переключение задач, и мне это удалось. Моя единственная проблема заключается в том, что когда я запускаю действия, они перезапускаются, поскольку они были новыми действиями (например, я пишу электронное письмо, нажимаю кнопку домой и вхожу в свое действие, запускаю электронную почту, а затем приложение запускает запуск электронной почты. в почтовый ящик и электронная почта потеряна) Так что это не настоящая многозадачность.

Вот мои шаги:

1) получение всех запущенных приложений:

List<ActivityManager.RunningTaskInfo> allTasks = activityManager.getRunningTasks(30);

2) получение намерения:

for (ActivityManager.RunningTaskInfo aTask : allTasks) {
        Intent i = new Intent(Intent.ACTION_MAIN);
        i.setComponent(aTask.baseActivity);
(...)

3) Запуск приложения при нажатии на кнопку:

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED).addCategory(Intent.CATEGORY_LAUNCHER);
    monthis.startActivity(intent);

`

Что не так с этим кодом? Должен ли я сделать что-то другое, чтобы получить это?

Большое спасибо за любой ответ.

Ответы [ 3 ]

3 голосов
/ 18 мая 2010

При создании Intents вы не должны использовать Intent.FLAG_ACTIVITY_NEW_TASK, вы должны использовать FLAG_ACTIVITY_REORDER_TO_FRONT.

0 голосов
/ 05 февраля 2012

Я думаю, что нашел ответ. Позвольте мне рассказать, что я сделал, простыми словами,

Предположим, у меня есть два действия, действие 1 и действие 2, и я перехожу от занятия 1 к занятию 2 (я выполнил некоторые работы в занятии 2) и снова возвращаюсь к занятию 1, нажав кнопку в занятии 1. Теперь на этом этапе я хотел вернуться к занятию2 и хочу, чтобы мое занятие2 было в том же состоянии, когда я последний раз оставлял занятие2.

Для приведенного выше сценария я сделал следующее: в манифесте я сделал некоторые изменения, подобные этому:

<activity android:name=".activity2"
          android:alwaysRetainTaskState="True"
          android:launchMode="singleInstance">
</activity>

И в активности1 на событии нажатия кнопки я сделал так:

Intent intent=new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
intent.setClassName(this,"com.mainscreen.activity2");
startActivity(intent);

И в активности2 при событии нажатия кнопки я сделал так:

Intent intent=new Intent();
intent.setClassName(this,"com.mainscreen.activity1");
startActivity(intent);

Теперь, что произойдет, так это то, что любые изменения, которые мы внесли в действие 2, не будут потеряны, и мы сможем просмотреть действие 2 в том же состоянии, в котором мы вышли ранее.

Я верю, что это ответ, и он прекрасно работает для меня. Поправь меня, если я ошибаюсь.

0 голосов
/ 18 мая 2010

Извините, если я допустил ошибки в своем объяснении, я довольно "нуб" и просто расскажу здесь свой опыт, чтобы улучшить результат поиска людьми того же ответа, чем я.

На самом деле мне пришлось использовать intent.setFlag (FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_REORDER_TO_FRONT) для лучшего результата. Замена была не самой лучшей идеей.

Не использовать FLAG_ACTIVITY_NEW_TASK, чтобы приложение электронной почты запускалось, когда я хотел запустить собственное приложение. Потому что электронная почта была «связана» с той же задачей, что и мое приложение.

Но, Лукас, я считаю твой ответ лучшим.

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