2015-02-26 2 views
0

У меня есть корневая активность, которая при необходимости определяется singleTopОчистите Android приложения всего на данном виде деятельности (выше/запущенно, и в том числе основного запущен один)

<activity 
     android:name=".MyMainActivity" 
     android:label="@string/app_name" 
     android:launchMode="singleTop" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

У меня есть уведомление, которое посылает широковещательные пакеты мой сервис переднего плана, рассказывающий об этом, и активность, если она связана с MyMainActivity, для остановки. Виджет можно коснуться, чтобы восстановить MyMainActivity до его предыдущего состояния, отсюда требуется singleTop.

Проблема заключается в том, что, начиная с введения кнопки остановки обслуживания в уведомлении (де-rigeur, как я понимаю), он убивает только MyMainActivity, что означает, что любой из Activity s, начиная с него, будет сохраняться, как я и предполагал, но не смог вернуться значимые результаты с момента их возникновения, MyMainActivity уже уничтожены.

Я застрял с простым finish(), чтобы обработать завершение вещания от MyMainActivity, после отключения от службы. Все остальные варианты finish имели нежелательные побочные эффекты.

System.exit(0); действительно действительно хорошо. За исключением того, что ожидаемый цикл жизненного цикла к разрушению игнорируется, а перезапуск - это немного беспокоиться.

finishAffinity является другой кандидат, за исключением того, что описано:

закончить эту деятельность, а также все виды деятельности, непосредственно ниже его

, когда мне нужно закончить деятельность над ним, в соответствии с android dev терминология.

Как это сделать?

ответ

0

Ответ очень прост и был с тех пор, как API 1. Позвоните finishActivity(int intent_id) с тем же intent_id который был поставлен на startActivityForResult(Intent, int).