Думаю, я понял это.
Моя проблема в том, что я предполагал, что onDestroy будет вызван, когда моя деятельность закончится, чтобы я мог сохранить состояние (и настройки, и т. Д.). И я предполагал, что onDestroy всегда будет происходить до создания нового экземпляра действия, чтобы новый экземпляр в onCreate мог загрузить состояние, сохраненное старым экземпляром.
В общем, это не так. Это даже не относится к onStop.
Решением для меня было просто сохранить то, что я хотел, в onPause. Кажется, я могу рассчитывать на то, что этот вызов будет вызван до создания любого нового экземпляра. Но так как onPause вызывается во многих случаях, когда мне не нужно сохранять, я также проверяю isFinishing (). То есть если isFinishing () в onPause, то я сохраняю.
Обратите внимание, что если бы я запустил свою деятельность в однопользовательском режиме, это не имело значения, я все равно получил бы два "живых" экземпляра. Тот, который был на пути к уничтожению (вызывался onPause, но еще не был введен onStop или onDestroy), а другой находился в onCreate.
Во всяком случае, я надеюсь, что я решил это сейчас.