1

как заголовок вопросов говорит - мне нужно знать, что является лучшим способом «удалить»/уничтожить/закончить действие, которое находится где-то посреди стека и в настоящее время в режиме паузы (не конкретные экземпляры, а определенные производные классы) ,Каков правильный способ очистки фоновой активности/активности из стека?

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

ActivityD <-- top of the stack, currently forground 
ActivityC 
ActivityA 
ActivityC 
ActivityA 

запрос на «очистить» все экземпляры ActivityC бы вызвать стек быть похожим:

ActivityD <-- still top of the stack, currently forground. 
ActivityA 
ActivityA 

Я не хочу этого делать, это зависит от режима запуска активности или флагов намерений. Я знаю, как использовать их и их преимущества.

Я знаю, что могу сказать, это отправить широковещательную рассылку, в которой все действия, необходимые для уничтожения, будут прослушиваться и вызывать Activity.finish() при получении широковещательной передачи.
Это работает, но требует регистрации ресиверов, даже когда их хостинг-активность приостановлена, и я не уверен, что метод «finish()» был вызван из приостановленной активности, это что-то право делать.

Можно ли вызвать метод Activity.finish() из возобновленной активности?

Это право регистрировать приемник в методе OnCreate() и отменить его регистрацию OnDestroy()?

Правильно ли обрабатывать широковещательную передачу от возобновленной деятельности и вызывать финал() с этой точки?

есть «Android-способ» или какой-либо API, который я не знаю, чтобы очистить действия от стека?

Заранее спасибо

ответ

2

сделать пользовательский широковещательный приемник и зарегистрировать его в любой деятельности, которая может быть уволен по по вашему выбору. в onReceiveMethod каждого действия (может быть выбран) просто наберите finish(). В этом ваши действия будут удалены из стека.Дальше вы можете посетить это для получения дополнительной помощи: On logout, clear Activity history stack, preventing "back" button from opening logged-in-only Activites

+0

вы читали мои вопросы тела? как я писал - я использую это решение на данный момент. можете ли вы сказать мне, если по какой-то причине использование этого решения не приведет к тому, что инженеры прошивки андроида поднимут глаза на использование широковещательных приемников таким образом? –

+1

sory примерно тот. Я не правильно прочитал ур. Насколько мне известно, такого пути нет. Но, скорее всего, неправильно. Одно дело, если вы хотите, чтобы активность не была в стеке, просто запустите ее без свойства history, можно установить через код и xml оба. –

+0

спасибо за ваш ответ, мне нужно, чтобы моя деятельность оставалась в стеке в некоторых точках, поэтому использование свойства history не является для меня вариантом. если вы хотите услышать, я могу быть более конкретным в ситуации, которая заставила меня нуждаться в этом требовании: мне нужно обрабатывать уведомление c2dm push изнутри и снаружи приложения - открывать определенные экраны в соответствии с ним и при переходе на какую-то активность - очистить все действия от «MainMenuActivity» из стека –

0

У меня также была та же проблема. То, что я сделал, я сохранил список статических массивов, и всякий раз, когда я переходил из одного действия в другое, в методе новой операции onCreate() я добавил объект текущей активности в этот список следующим образом:

SomeClass.addActivity(CurrentActivity.this); 

Я добавил указанное выше заявление в каждом виде деятельности.

AddActivity():

public void addActivity(final Activity activity) { 
      activityList.add(activity); 
     } 

И когда я хотел, чтобы очистить стек, я назвал:

public boolean clearStack() { 
     for (Activity activity : activityList) { 
      activity.finish(); 
     } 
     activityList.clear(); 
     return (activityList.isEmpty()); 
    } 

Таким образом, я очистил свой стек деятельности.

Спасибо :)

+1

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

0
Intent myintent = new Intent(YourCurrentActivity.this, YourNextActivitys.class); 
    myintent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(myintent2); 
    finish(); 

Я думаю, что это правильный путь, чтобы очистить все предыдущие мероприятия ...

+0

в соответствии с: http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP, что делает так, что будет не только класс «YourNextActivitys», но и все действия между его к другому экземпляру в стеке –

+0

Я очищаю свои предыдущие действия с этим. –

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

  • Нет связанных вопросов^_^