Нужна помощь в понимании того, куда поместить фрагмент кода, onCreate () / OnStart - PullRequest
0 голосов
/ 24 декабря 2011

Я пытался взглянуть на жизненный цикл активности, но до сих пор не понимаю, куда поместить свой код.

  1. В моем onCreate() я получаю местоположение GPS.
  2. Через некоторое время в приложении вызывается Camera Intent, а затем отклоняется.
  3. Местоположение GPS восстановлено снова (я думаю, onCreate() выполняется снова?)

Я хочу, чтобы местоположение GPS было получено только один раз, при самом запуске приложения после его запуска.

Ответы [ 5 ]

1 голос
/ 24 декабря 2011

onCreate() вызывается при создании действия. И onStart() вызывается сразу после onCreate().

Вы можете прочитать о жизненном цикле деятельности здесь: http://developer.android.com/reference/android/app/Activity.html

К вашей проблеме вы можете переопределить onSaveInstanceState, метод, который поможет вам сохранить Bundle, и затем вернуть его обратно в метод onCreate (параметром в onCreate является этот Bundle).

protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    *Modify the bundle*
}

И если вы не можете сериализовать местоположение GPS, вы можете использовать:

@Override
public Object onRetainNonConfigurationInstance() {
     return objectYouNeed;
}

И для извлечения этого объекта используйте getLastNonConfigurationInstance().

Надеюсь, это поможет!

1 голос
/ 24 декабря 2011

Вы можете проверить, что, если у вас уже есть действительное местоположение GPS, вы можете пропустить этот шаг и больше не получать его.Вы можете использовать SharedPreferences для хранения этого состояния.

Надеюсь, это поможет!

0 голосов
/ 24 декабря 2011

См. мой ответ о том, почему вы не можете просто "получить" позицию GPS для некоторого фона.Получение GPS-положения один раз в вашем методе onCreate () (с ленивыми проверками инициализации, чтобы увидеть, есть ли у вас уже GPS-координаты в случае нескольких вызовов onCreate ()), может быть неправильным подходом для вашего приложения и может привести кприложение должно быть принудительно закрыто ОС Android.

Если вы определили, что последнее известное местоположение устройства всегда достаточно хорошо для вашего приложения, то вызывайте его каждый раз, когда вызывается метод onCreate (),все будет в порядке, так как не нужно использовать схему GPS.Поэтому, если последнее известное местоположение достаточно хорошо, просто запрашивайте его каждый раз, когда вызывается метод onCreate (), и избегайте сложности ленивых проверок мягкого типа инициализации.

Если последнее известное местоположение не всегда хорошодостаточно для вашего приложения, тогда вы не сможете надежно дождаться исправления в методе onCreate (), так как вы рискуете, что исправление местоположения займет слишком много времени, в результате чего система Android принудительно закроет приложение, не отвечающее на запросы, поскольку оно не вернулось из onCreate () метод во времени.Вместо этого вам нужно запустить фоновую асинхронную задачу в методе onCreate () (проверяя, что у вас еще не запущена такая асинхронная задача), который начинает прослушивать обновления местоположения до тех пор, пока не будет получено достаточно хорошее исправление, а затем запоминает это местоположение,остановка слушателей местоположения и, следовательно, отключение схемы GPS.Используйте код в строке:

private MyAsynchGpsLocationListener mGpsListener = null;

public ... onCreate() {
  if (mGpsListener == null) {
    mGpsListener = new MyAsynchGpsLocationListener();
    mGpsListener.start();
  }
}

someMethod() {
  if (mGpsListener != null) {
    Location myLocation = mGpsListener.getLocation();
    if (myLocation != null) {
      // Do something with a "good enough" location
    }
  }
}
0 голосов
/ 24 декабря 2011

Поместите его ТОЛЬКО в onCreate ().

Теперь, если вы думаете, что он вызывается несколько раз, вы не можете сделать что-то, чтобы проверить, есть ли он у вас.Такие как

onCreate(){

//other code

    if(GpsStuff == null)
    {
        //get gps position
    }
}
0 голосов
/ 24 декабря 2011

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

...