Ответ 1
Intent
объекты постоянно привязаны к Activity
, Service
и другим компонентам до тех пор, пока выполняются эти компоненты. Они не просто уходят, потому что вы перешли в другое приложение. Причина этого заключается в том, что Android может убить процесс в любое время, но пользователь все равно может вернуться и продолжить то, что они делают. Это делает Intents идеальным для хранения или передачи небольших (а иногда и больших) бит информации через Extras.
Метод onNewIntent()
предназначен специально для обработки компонентов приложения, которые являются более стойкими и, следовательно, могут быть вызваны более одного раза в течение его жизненного цикла, но им необходимо отслеживать причины, по которым он был вызван (и, следовательно, данные, которые он вызывал с помощью). Вызов setIntent()
или не зависит от того, что вам нужно сделать.
Если вам все равно, почему это было вызвано впоследствии, вы можете сохранить оригинал Intent
, не вызвав setIntent()
. Это особенно полезно, когда ваш Activity
(или какой-либо другой компонент) делает то же самое независимо от того, кто его назвал и какие данные он предоставляет.
Если вам нужно индивидуально реагировать на каждое событие, вы должны, по крайней мере, сохранить новую информацию Intent
. Это означает, что вы можете избежать setIntent()
, однако ни один из компонентов, с которыми он ссылается, будет иметь любую информацию Intent
, если вы не отправите его им напрямую. Это может быть желательным поведением для приложения, которое не может гарантировать, что оригинальный Intent
был полностью обработан.
Если вам необходимо ответить на каждый из них индивидуально, а оригинал Intent
не имеет значения, вы используете setIntent()
. Это отбрасывает исходный Intent
, который все еще там... и помещает новый Intent
, чтобы, если пользователь уйдет (еще раз), они вернутся в одно и то же место.
Причина, по которой super.onNewIntent()
не справляется с этим, заключается в том, что классы основных компонентов не могут определить, является ли новый Intent
более важным, чем старый. Все, что он заботится, это то, что у него есть Intent
, а не то, что он есть. Вот почему мы переопределяем такие методы, чтобы определить, что важно, а что нет. Общее ощущение состоит в том, что базовые классы, такие как Activity
, могут использовать любые данные, которые у нас есть, любыми способами, которые он хочет (если мы не переопределим и не скажем иначе). Однако они не должны (и часто не могут) избавиться от наших данных, если мы не скажем им конкретно. Это аргумент, который вы действительно не хотите иметь с некоторыми программистами. хехе
Надеюсь, что это поможет.