Урок 24. Activity Lifecycle, пример смены состояний с двумя Activity

Обсуждение уроков
Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение rezak90 » 09 окт 2012, 14:19

у Андроида есть такая бида, из-за того что памятью управляет не разработчик а Dalvik, то он там что то скапливает или плохо распределяет ресурсы, из-за этого Андроид много "жрёт" батарею, и по этому телефоны на Андроиде садятся очень быстро (бывает новые телефоны за пол дня садятся) и это одна из самых больных тем. Если же Dalvik была так же открыта как сама ОСь может и можно было бы что то предпринять, а так вижу что народ часто устанавилвает всякие сборщики мусора и освободители памяти что бы освобождать/закрывать не нужные программы.
R.id.team
Политика на форуме запрещена

DeadMazai
Сообщения: 3
Зарегистрирован: 07 ноя 2012, 16:16

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение DeadMazai » 07 ноя 2012, 16:24

Мне кажется тут @Override перед onClick лишний - мы же не переопределяем метод супер-класса, а реализуем метод интерфейса.
Если не прав - поправьте, зеленый еще в этом деле :)

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение rezak90 » 07 ноя 2012, 20:32

это зависит от апи версии а переопределение здесь не причём
R.id.team
Политика на форуме запрещена

DeadMazai
Сообщения: 3
Зарегистрирован: 07 ноя 2012, 16:16

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение DeadMazai » 08 ноя 2012, 09:26

Порылся на сайте документации и нарыл вот это.
http://developer.android.com/reference/ ... rride.html
Привязку к версии API я не нашел, да и логики в том, чтобы нарушать прямую и обратную совместимость версий API не правильно имхо. В статье как раз про переопределение написано.
Можете привести пример версии API, в которой допускается @Override перед onClick (берется в расчет первое определение при реализации интерфейса OnClickListener как в примере урока)?
Я лично только что проверил в 8, 10 и 14 (больше было лень :) ) - везде начинает ругаться:

Код: Выделить всё

The method onClick(View) of type MainActivity must override a superclass method
В принципе логично, если следовать логике ООП и реализации интерфейсов.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение rezak90 » 08 ноя 2012, 11:07

Override это аннтотация компилятору о том что будет переопределён метод суперкласса. В большей степени зависит от настройки IDE. То есть если вы делаете переопределение скажем метода onResume() без аннотации то не гарантируется на 100% что он будет переопределён. Такая ошибка в основном может быть когда при запущенном приложении идёт звонок и активити переходит в паузу, то потом оно возможно не сможет восстановиться. Вот как то так.
R.id.team
Политика на форуме запрещена

v_grechka
Сообщения: 20
Зарегистрирован: 09 авг 2012, 13:30

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение v_grechka » 12 дек 2012, 17:17

Есть 2 активити. Основная и дополнительная.
На основной есть список

Код: Выделить всё

 ListView listContent = (ListView)findViewById(R.id.listContent);
По длинному клику редактируются данные выбранного элемента. Редактирование на 2-й активити.
Пробую при закрытии 2-й активити обновить список и выполнить переход на тот же элемент списка.
Для примера на какой-нибудь элемент(последний)
Пробовал засунуть код перехода в

Код: Выделить всё

    
@Override
    protected void onResume() {
      super.onResume();
      Log.d("LOG_TAG", "MainActivity: onResume()");
      this.listContent.setSelection(15);	
    }
При запуске программа пишет ошибку
12-12 14:11:20.274: E/AndroidRuntime(790): java.lang.RuntimeException: Unable to resume activity {ru.mail.Simplydatabase_1/ru.mail.Simplydatabase_1.Simplydatabase_1Activity}: java.lang.NullPointerException

решил через доп.процедуру

Код: Выделить всё

	private void SelectedPosition(int ip){
		listContent = (ListView)findViewById(R.id.listContent);
		listContent.setSelection(ip);	
 		Toast.makeText(
				getApplicationContext(),
				"Вы выбрали "
						+ Abon_name+" position="+ip,
				Toast.LENGTH_SHORT).show();
	}
и ее вызов в onResume(). Оказывается, переменная listContent , которую мы инициализировали в OnCreate уже не видится в OnResume

Аватара пользователя
Vici
Сообщения: 12
Зарегистрирован: 06 ноя 2012, 00:29

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение Vici » 28 янв 2013, 17:26

Странно, у меня, когда нажимаю кнопку go to activity two в логах
...
ActivityTwo: onResume()
MainActivity: onPause() (вместо onStop() в вашем примере).
А ещё выходя из приложения пишет не
MainActivity: onPause()
MainActivity: onStop()
MainActivity: onDestroy()
а
MainActivity: onPause()
MainActivity: onPause()
MainActivity: onDestroy()

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение damager82 » 30 янв 2013, 15:26

Vici писал(а):Странно, у меня, когда нажимаю кнопку go to activity two в логах
А код точно мой скопировали полностью? Поведение очень похоже на ошибку копипаста, если сами код рисовали
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение Digetix » 07 фев 2013, 15:14

Здравствуйте. Подскажите, пожалуйста, как правильно сделать: есть активити 1 с картой и активити 2 в текстовым полем и кнопкой. При запуске показывается активити 1, из меню активити 1 можно перейти в активити 2, там кнопка, по которой идёт переход на активити 1 и там указывается место. Сейчас при переходе с кнопки активити 1 пересоздается. Вопрос: как правильно сделать, чтоб при переходе с меню активити 1 ставилась на "паузу", а при переходе с кнопки "возобновлялось"? Если я правильно выразился.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение rezak90 » 07 фев 2013, 21:32

а как вы делаете переход со второй активити в первую? наверное startActivity?
R.id.team
Политика на форуме запрещена

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение Digetix » 07 фев 2013, 22:36

rezak90 писал(а):а как вы делаете переход со второй активити в первую? наверное startActivity?
Да.

Код: Выделить всё

Intent intent = new Intent(this, Activity1.class);
startActivity(intent);

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение rezak90 » 07 фев 2013, 23:05

вы и ответили на свой вопрос))) вы же создаёте новое активити. Убиваете воторую finish(), вторая убъётся и со стека вызовится предыдущая, то есть первая.
R.id.team
Политика на форуме запрещена

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение Digetix » 07 фев 2013, 23:13

rezak90 писал(а):вы и ответили на свой вопрос))) вы же создаёте новое активити. Убиваете воторую finish(), вторая убъётся и со стека вызовится предыдущая, то есть первая.
Что-то я не понял :) когда я перехожу из 1 на 2, мне 1 нужно убить?
когда из 2 на 1 убить 2 ? :)
Мне нужно из меню 1 перейти в 2, оттуда перейти в 1 взять координаты точки, и с ними потом вернуться в 2 с результатом :)

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение Digetix » 07 фев 2013, 23:18

Или когда перехожу из 1 в 2 ничего не убивать, а когда из 2 в 1, то 2 убить? Так? :)
На кнопке в активити 2 такой код?

Код: Выделить всё

Intent intent = new Intent(this, Activity1.class);
startActivity(intent);
finish();
Последний раз редактировалось Digetix 07 фев 2013, 23:24, всего редактировалось 1 раз.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение rezak90 » 07 фев 2013, 23:21

так
R.id.team
Политика на форуме запрещена

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение Digetix » 07 фев 2013, 23:39

Что не так. При запуске приложения идёт проверка включен ли GPRS.
Переход из 1 в 2

Код: Выделить всё

Intent intent = new Intent(this, Activity2.class);
startActivity(intent);
Переход из 2 в 1

Код: Выделить всё

Intent intent2 = new Intent(this, Activity1.class);
startActivity(intent2);
finish();
При этом при переходе из 2 в 1 снова включается проверка на включение GPRS, я так понимаю, что 1 снова создается.
Или лучше сделать проверки на первый запуск приложения?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение rezak90 » 08 фев 2013, 00:26

мда...
Переход из 2 в 1:

Код: Выделить всё

finish();
P.S. такой себе вопросик: на телефоне нету кнопки back? :?
R.id.team
Политика на форуме запрещена

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение Digetix » 08 фев 2013, 10:53

rezak90 писал(а):мда...
Переход из 2 в 1:

Код: Выделить всё

finish();
P.S. такой себе вопросик: на телефоне нету кнопки back? :?
Есть. Мне ж нужно не просто туда-сюда по активити переходить. Мне нужно по кнопке переходить. А вы предлагаете этой кнопкой просто убить её и поднять первую. Или я что-то недопонимаю. Объясню смысл приложения. Запускается первое активити с картой, отображается текущее положения пользователя. В Меню есть кнопка Добавить точку. По ней пользователь переходит на активити 2, там заполняет текстовые поля, добавляет фото и там же есть кнопка указать место на карте, по ней нужно вернуться в карту (то есть активити 1), взять координаты точки и с этими координатами вернуться в 2. А если я убью 2 при возврате в 1, то все текстовые данные уничтожаться. Так?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение rezak90 » 08 фев 2013, 12:04

А если я убью 2 при возврате в 1, то все текстовые данные уничтожаться. Так?
во второй да, уже данных не будет
R.id.team
Политика на форуме запрещена

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

Re: Урок 24. Activity Lifecycle, пример смены состояний с дв

Сообщение Digetix » 08 фев 2013, 13:24

rezak90 писал(а):
А если я убью 2 при возврате в 1, то все текстовые данные уничтожаться. Так?
во второй да, уже данных не будет
Ну а можно сделать так, чтоб с 1 на 2, с 2 на 1, взять данные, и снова на 2, при этом не плодить активити и данные сохранить?

Ответить