2011-12-26 2 views
0

Если я нажму на дом и вернусь в свое приложение немного позже, я обнаружим, что состояние сохранено отлично. По какой-то причине, однако, если я заблокирую телефон, а затем разблокирую его, мое приложение было возвращено в исходную панель состояния несколько вещей здесь и там. Когда я просмотрел журналы, я обнаружил, что onCreate был вызван, когда телефон находился в заблокированном состоянии. Потому что блокировка телефона - это совсем не то, что нужно делать, поэтому каждый раз, когда вы делаете это, каждый раз, когда вы делаете это, нежелательно для пользователя. Как этого можно избежать, по крайней мере, в течение более длительного периода времени, чем через несколько секунд после блокировки телефона?поведение экрана блокировки Android

ответ

2

Как работает ОС Android, он сам решает, когда нужно уничтожить ваш взгляд. Для того, чтобы избежать потерь этой информации есть метод, который может быть переопределен в вашей деятельности

@Override 
public void onSaveInstanceState(Bundle outState){ 
    iGameContent.saveGame(outState); 
} 

Сохранить все ваши необходимые данные в outState, и в OnCreate метода, проверьте, если его новый экземпляр или сохраненный экземпляр, как это:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.game); 

    if (savedInstanceState!=null){ 
     iGameContent.loadGame(savedInstanceState); 
    }else{ 
     // Normal initialization 
    } 
} 

пример сохранения/загрузки к Bundle заключается в следующем:

public void loadGame(Bundle aBundle){ 
    iBadsHit = aBundle.getInt("iBadsHits",0); 
} 

public void saveGame(Bundle aBundle){ 
aBundle.putInt("iBadsHit", iBadsHit); 
} 
+0

Речь идет о долгосрочных сбережениях (например, рекордах) или краткосрочных (например, последний уровень играл)? – Jack

+0

Нет, на короткий срок. Если вы закроете приложение, пакет будет очищен. onSavedInstanceState это должно показаться, что система не убила приложение – Corbella

+0

Просто напишите все переменные класса в этом комплекте, и он будет восстановлен при поступлении из фона или изменении ориентации. Но не при запуске приложения – Corbella

1

Если ваш журнал показывает, что вызов onCreate был вызван, значит, ваш процесс приложений был убит.

Вы знакомы с жизненным циклом активности Android? Если нет, прочитайте здесь: Android Activities

+0

Да, я так много думаю, но я немного смущен, почему телефон убивает мой процесс на экране блокировки последовательно, но не так (так много), когда телефон все еще используется для других вещей. Кроме того, экран заставки снова не отображается, поэтому процесс не может быть полностью убит – Jack

+0

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

+0

Так что он не был убит. Я бы предположил, что ваша игра в пейзажной ориентации, верно? Если это так, вам просто нужно сохранить состояние игры, как описано в ссылке в моем ответе. Вы должны делать это в любом случае, хотя если вы не хотите, чтобы пользователь нажал кнопку «Домой», чтобы перезапустить игру, когда они ее запустили. – C0deAttack

0

поведение на экране блокировки может изменяться от одного устройства к другому. Некоторые события могут привести к уничтожению приложения. Вы можете попробовать справиться с некоторыми из этих событий, чтобы избежать этой ситуации, указав его на AndroidManifest.xml:

android:configChanges="keyboardHidden|orientation" 

Эти два являются наиболее проблематичными в экране блокировки. Yo может найти более подробную информацию о последней главе этого nvidia document

Смежные вопросы