2012-06-08 3 views
0

У меня есть четыре действия, которые приложение циклически проходит. Первый из них получает огромное количество данных, поэтому я не хочу делать это более одного раза. Дело в том, что если пользователь нажимает клавишу «назад» на последнюю активность, я хочу вернуться к первой, не перезагружая ее. Я сейчас думаю о методах startActivityForResult и заканчиваю два предыдущих, но может быть лучшее решение?Различные поведения на задней клавише нажатой

Сценарий:

enter image description here

ответ

2

Hasslarn,

Первое, что вы должны понять, что у вас есть очень небольшой выбор, как для будет ли операция перезагружена или нет. Это определяется системой (в значительной степени). С учетом сказанного, есть несколько вещей, которые вы можете сделать, чтобы ограничить желание системы убить Activity. Кроме того, вы можете использовать целый ряд инструментов, имеющихся в вашем распоряжении, чтобы ограничить воздействие такого возможного закрытия

  1. Отделка каждого ребенка активность, как это становится неважным. Это освободит ресурсы, снижая необходимость избавиться от неиспользуемых действий (даже временно).

  2. Найдите простой, но умный способ ограничения нагрузок.

Основываясь на предоставленной информации, предлагаемое решение является жизнеспособным способом достижения обоих. Тем не менее, я хотел бы спросить: «Требуется ли активность B, чтобы активность была активна, а активность C открыта?» Если нет, то вы можете сделать следующее:

  1. startActivityForResult (активность B)

  2. Когда активность B сделано, отправить результат обратно активность А и startActivityForResult (Activity C)

  3. Наконец, когда действие C завершено, вы можете запуститьActivityForResult (Activity D) и обратно, будет работать без особых усилий, и вам не придется закрывать другие действия.

Кроме того, если вы нажмете Back on Activity C, вы можете подать отмененный результат в Activity A, заставляя перезапустить Activity B, если вы этого желаете. В зависимости от требуемой обработки для Activity B, это может быть совсем не проблема для вашего приложения.

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

Надеется, что это помогает,

FuzzicalLogic

+0

Спасибо за этот очень тщательный ответ. Я решил, что это похоже на ваше решение. Я делаю startActivity (B) от A, от B i startActivity (C). Из C i do startActivity (D), и если backkey нажата в D, закончить его и проверить этот конкретный код результата на C. Если этот код результата был обратным, я заканчиваю C, который вернется в B, который проверяет на тот же код и заканчивается также, возвращая меня к A. Возможно, не очень красиво, но для него это не очень хороший код, хотя я бы предпочел что-то похожее на ответ Саны. По крайней мере, A не перезагружается :) –

+0

Управление несколькими действиями всегда сложно. Я ОГРОМНЫЙ поклонник Dialogs. Я использую только действия для вещей, которые нужно вызывать другими приложениями, если они не являются фактически разными задачами пользователя. Но это во многом зависит от ваших потребностей. :) Решение Sana может быть весьма полезным, но может быть вредным, если вы заявили, что «первый из них получает огромный объем данных», поскольку он не будет освобождать ресурсы для других видов деятельности; он просто переместит их. –

+0

На самом деле я на самом деле являюсь поклонником деятельности :) Большое спасибо за ваш вклад, спасибо за помощь –

1

Попробуйте использовать это:

Intent a = new Intent(this,A.class); 
    a.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
    startActivity(a); 
    return true; 

активность А будет получить заказана на фронт, без создания нового экземпляра. Если вы хотите передать дополнительные услуги через намерение, вы можете получить Намерение дополнительные услуги в onNewIntent (намерения) в деятельности А.

+0

Спасибо за быстрый ответ, но это так, к сожалению, не работает. Это ничего не изменило. И твой первый ответ. –

Смежные вопросы