метод onNewIntent

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

метод onNewIntent

Сообщение yura91 » 28 авг 2014, 14:37

при вызове метода onNewIntent в активити происходит переход к самому вызываемому активити??

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: метод onNewIntent

Сообщение altwin » 28 авг 2014, 14:39

Изображение

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: метод onNewIntent

Сообщение yura91 » 28 авг 2014, 15:03

там на английском надо переводить а вообще просто интересно открывается само активити или нет?? я знаю что оно тогда процесс создания не проходит так это??

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: метод onNewIntent

Сообщение altwin » 28 авг 2014, 15:13

да для той у которой установлен флаг FLAG_ACTIVITY_SINGLE_TOP, когда Activity перезапускается используется уже существующий инстанс которому просто передается новый intent. Только тут всеравно getIntent() работать не будет, точнее будет но вернет оригинальный Intent. Нужно дополнительно вызывать setIntent(Intent)
Изображение

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: метод onNewIntent

Сообщение yura91 » 28 авг 2014, 16:44

то есть активити все равно появляется на экране да??

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: метод onNewIntent

Сообщение yura91 » 28 авг 2014, 16:45

для котого вызван нью интент?? или оно непоказывается в этом момент пользователю но срабатывает??

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: метод onNewIntent

Сообщение yura91 » 28 авг 2014, 18:35

то есть в нью интент можно передавать данные?? можете привести фрагмент кода??

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: метод onNewIntent

Сообщение altwin » 29 авг 2014, 10:28

yura91 писал(а):то есть активити все равно появляется на экране да??
Этот метод вызывается для активити которая итак на экране, просто с помощью него можно передать новый интент, с новыми данными.
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: метод onNewIntent

Сообщение altwin » 29 авг 2014, 10:29

yura91 писал(а):то есть в нью интент можно передавать данные?? можете привести фрагмент кода??
Посмотрите лучше примеры использования тут: http://android.okhelp.cz/java_android_c ... nNewIntent
Изображение

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: метод onNewIntent

Сообщение yura91 » 29 авг 2014, 14:31

а если у меня допустим есть 2 активити в таске первое было создано и второе я вызвал из первого ( то есть оба существуют).
и у первого активити есть onNewIntent и в манифесте прописан нужный атрибут я допустим вызываю первое активити по нажатию на кнопку во втором через метод startactivity. Вот в этом случае будет вызван этот метод onNewIntent в первом активити верно и первое активити не будет показано на экране(не будет перехода в него)?? и как правильно передать в этот метод строковую переменную можете привести фрагмент кода?? Может я заблуждаюсь если так обьясните в чем??

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: метод onNewIntent

Сообщение altwin » 29 авг 2014, 15:51

yura91 писал(а):а если у меня допустим есть 2 активити в таске первое было создано и второе я вызвал из первого ( то есть оба существуют).
и у первого активити есть onNewIntent и в манифесте прописан нужный атрибут я допустим вызываю первое активити по нажатию на кнопку во втором через метод startactivity. Вот в этом случае будет вызван этот метод onNewIntent в первом активити верно и первое активити не будет показано на экране(не будет перехода в него)?? и как правильно передать в этот метод строковую переменную можете привести фрагмент кода?? Может я заблуждаюсь если так обьясните в чем??
Дело в том, что вызвать метод этот можно только у той активити у которой установлен флаг android:launchMode="singleTop" , и если вы этот метод вызовете из другой активити то да эта станет на верх стека, т.е. будет активна. Но дело в том, что его вам вызывать не надо, он сам вызывается для этого типа активити вместо onCreate() если только не был вызван до этого onDestroy(). По поводу передачи строки, то передается она в обект Intent как и в любом другом случае, а метод onNewIntent принимает этот Intent в качестве параметра. Чтобы было проще понять считайте, что это просто метод onCreate(), который вызывается у activity помеченных, как singleTop. Разве что не стоит забывать что при передаче нового интента нужно выполнять setIntent(Intent) иначе возвращаться будет предыдущий.
Изображение

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: метод onNewIntent

Сообщение yura91 » 29 авг 2014, 16:24

то есть все происходит тоже самое как у обычных активити заисключением singleTop и вместо onCreate вызывается метод onNewIntent так это?? можете привести простенький пример кода по передачи строки в метод onNewIntent из другого активити для наглядности??

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: метод onNewIntent

Сообщение yura91 » 29 авг 2014, 16:25

а setIntent нужно вызывать в методе onNewIntent для передачи из него данных да??

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: метод onNewIntent

Сообщение yura91 » 29 авг 2014, 17:40

можете для наглядности написать фрагмент кода для передачи строки из одного активити в другое и так чтоб во втором использовался onNewIntent??

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: метод onNewIntent

Сообщение yura91 » 29 авг 2014, 17:40

только java код небольшой и все??

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: метод onNewIntent

Сообщение altwin » 29 авг 2014, 18:06

yura91 писал(а):можете для наглядности написать фрагмент кода для передачи строки из одного активити в другое и так чтоб во втором использовался onNewIntent??
Так там писать нечего, вы просто передаете intent как обычно, и дописываете метод onNewIntent он автоматически вызовется каждый раз, когда приходит новый интент:

[syntax=java5]
/** On New Intent
*
* Called automatically when a new search string has been sent. Calls the
* fragment to display the string in a Toast.
*
* @param intent
*/
@Override
public void onNewIntent(Intent intent)
{
Log.d("Activity", "New Intent received.");

setIntent(intent);

if (Intent.ACTION_SEARCH.equals(intent.getAction()))
{
String query = intent.getStringExtra(SearchManager.QUERY);
SearchBarCompatFragment frag = (SearchBarCompatFragment)getSupportFragmentManager()
.findFragmentById(R.id.fragment_container);

frag.showSearchString(query);
}
}
[/syntax]
Но опять же тут явно он не вызывается он просто сделает activity видимой с новыми параметрами. Его можно вызвать явно из другой activity ровно также как и onCreate() но смысла в этом нет, не рекомендуется насиловать жизненный цикл activity. похоже я не так выражаюсь, этот метод нужен скорее для того, чтобы обработать получение нового интента, если активити просто возвращается из бекграунда, то вызывается метод onResume, а если пришел новый Интент то обычно вызывается onCreate() повторно, тут же activity помечается специальным флагом и в ее lifecycle по сути добавляется новый метод onNewIntent, если смотреть по графику, то прямо после onPause и перед onResume и этот метод позволяет обработать тот самый полученны Intent без повторного вызова onCreate().
Изображение

yura91
Сообщения: 265
Зарегистрирован: 22 авг 2014, 13:43

Re: метод onNewIntent

Сообщение yura91 » 29 авг 2014, 20:29

SearchBarCompatFragment что это за класс??

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: метод onNewIntent

Сообщение altwin » 30 авг 2014, 14:06

yura91 писал(а):SearchBarCompatFragment что это за класс??
Это просто фрагмент кода, обычный класс наследующий Fragment.
Изображение

Ответить