Обмен данными между действиями без использования oncreate - PullRequest
1 голос
/ 20 ноября 2011

Я реализовал одно приложение с Android, которое состоит из двух частей (действий)

1- Основное действие - получение GP, вычисление X, Y пикселей на карте
2 - Отображение / прокрутка карты после загрузки.с SD-карты.

Обмен между обоими действиями осуществляется каждые 20 секунд с помощью Intent и Extras (X, Y графики на карте)

Все работает правильно.

Проблема в том, что каждый раз, когда я отправляю намерение, я создаю новую Карту, и после многих обменов происходит сбой приложения.

Можно ли перенести данные в одно действие, не создавая новую карту?или другое решение для изменения параметров OnCreate второго действия

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 20 ноября 2011

Добавьте android:launchMode в свою основную деятельность в AndroidManifest.xml.Используйте singleTask или singleInstance в зависимости от ваших требований.

<activity android:name="com.app.activity" android:launchMode="singleTask" ...>

Цитаты из http://developer.android.com/guide/topics/manifest/activity-element.html#lmode:

singleTask

Система создает действие в корне новой задачи и направляет ее намерение.Однако, если экземпляр действия уже существует, система направляет намерение к существующему экземпляру посредством вызова его метода onNewIntent () вместо создания нового.

singleInstance

То же, что и "singleTask", за исключением того, что система не запускает никаких других действий в задаче, содержащей экземпляр.Деятельность всегда является единственным и единственным участником своей задачи.

0 голосов
/ 20 ноября 2011

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

Чтобы остановить это, вы должны установить флаг для намерения, например:

int iflags = Intent.FLAG_ACTIVITY_REORDER_TO_FRONT;
Intent i = new Intent("com.you.yourapp.yourotheractivity");
i.setFlags(iflags);
// Apply your extras
startActivity(i);

Этот флаг заставит его повторно использовать другое действие, если оно находится в фоновом режиме, поэтому onCreate () запускается только в первый раз, после этого только onResume () запускается

...