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