2013-11-06 5 views
1

Я прочитал, что после вращения экрана снова создается андроидная активность. Я понял, как восстановить представление, но я не понимаю, могу ли я начать с того, где метод был остановлен после поворота экрана.Восстановить метод после поворота экрана на android

+0

ваш метод не останавливается, когда экран вращается. – njzk2

+0

@ njzk2 Как действие разрушено, как это может быть правдой? – Simon

+0

Но если действие создано снова, как оно сохраняется? Проблема в том, что я должен заблокировать вращение экрана, если я не могу восстановить метод, который был остановлен. –

ответ

0

Восстановление после вращения экрана.

В самой простой форме вы сохраняете то, что вам нужно, чтобы воссоздать, где вы остановились в методе onSaveInstanceState. Таким образом, для вашего основного фонарика вы сохраняете состояние света. Для вас более сложные приложения сохраняют все глобальные поля. Flashlight имеет глобальную переменную isFlashOn.

private boolean isFlashOn = false; 

сохранить состояние фонарика в onSaveInstanceState

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putBoolean(ISON, isFlashOn); 
} 

Тогда в OnCreate метод вы воссоздавать глобальную переменную.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    if (savedInstanceState != null) { 
     isFlashOn = savedInstanceState.getBoolean(ISON); 
    } 

В дальнейшем процесс onstart обрабатывает isFlashOn. Этот фонарик включается одним щелчком мыши, поэтому я изменяю состояние isFlashOn и вызываю обработчик кликов.

@Override 
protected void onStart() { 
    super.onStart(); // Always call the superclass method first 

    if (camera == null) { 
     camera = Camera.open(); 
    } 
      //flip the isflashon and then click the button 
    isFlashOn = !isFlashOn; 
    onClick(null); 
} 

обрабатывать клик.

public void onClick(View arg0) { 
    ImageButton i = (ImageButton) findViewById(R.id.imageButton1); 

    final Parameters p = camera.getParameters(); 
    if (isFlashOn) { 
     i.setImageResource(R.drawable.ic_launcher); 
     isFlashOn = false; 
     p.setFlashMode(Parameters.FLASH_MODE_OFF); 
    } else { 
     i.setImageResource(R.drawable.ic_launcher2); 
     p.setFlashMode(Parameters.FLASH_MODE_TORCH); 
     camera.setParameters(p); 
     // Set flag to true 
     camera.startPreview(); 
     isFlashOn = true; 
    } 

Good Luck

0

Если был установлен способ, который вы выполняли в тот момент, когда вы повернули экран, метод завершит его работу.

Это не будет приостановлено или что-либо еще, поскольку его «невозможно» сделать это.

Если этот конкретный метод был важным для вашего приложения/деятельности, вы должны затем называть его снова при активном отдыхе.

+0

Но если это мехтод, который сохранит какое-то важное значение, и он не приостановлен, то я не могу повернуть экран –

+0

Я не понял, что вы просто сказал? Вы всегда можете повернуть экран, если вы не заблокируете его для этого действия. Неважно, что делает этот метод, он выполнит свою работу, даже если вы повернете экран, отметьте комментарий njzk2 для приятного объяснения. – JanBo

+0

В таких случаях, когда вы поворачивали экран и, например, вы использовали Thread, который работал над загрузкой данных из веб-службы, вы должны остановить этот поток и запустить его снова после его воссоздания;). – JanBo

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