Скажем, есть приложение, которое создает учетную запись в AccountManager. Пользователь некоторое время изучает довольно сложный график активности этого приложения, затем переходит в Accounts and Sync в настройках Android, удаляет учетную запись и подписывает ее (все еще находится в Accounts and Sync как другой пользователь.
Я определил приемник для вещания LOGIN_ACCOUNTS_CHANGED, и я могу изящно закрыть все службы. Но действия все еще присутствуют, нося имя первого пользователя в заголовке (пользовательский интерфейс запутался несколькими способами, но это наиболее очевидно).
Итак, возникает вопрос: что делать с этими сиротами?
- Я мог бы использовать что-то вроде
clearTaskOnLaunch, но все действия находятся в фоновом режиме, когда происходит изменение. - Установить флаг в SharedPreferences и проверить
onResume()каждого действия, а затем запуститьclearTaskактивность, если это необходимо? Слишком грязный. - Лучший вариант, который я смог придумать, - использовать
android.os.Process.killProcess(android.os.Process.myPid()), чтобы убить все действия. Это не слишком грациозно, но выполняет работу. Единственный побочный эффект заключается в том, что стек активности все еще существует, когда наиболее разумным кажется, что нужно начинать с действияLAUNCHERс четкой историей.
Итак, что было бы лучшим способом ответить на описанный сценарий?