http://developer.android.com/guide/topics/resources/runtime-changes.html. Si può avere un guardare al link sotto la voce Gestione della configurazione cambiare se stessi
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
Ora, quando una di queste configurazioni cambiano, MyActivity non si riavvia. Invece, MyActivity riceve una chiamata a onConfigurationChanged(). Questo metodo viene passato un oggetto Configuration che specifica la nuova configurazione del dispositivo.
android:configChanges="orientation|screenSize" (andorid 3.2 and above screen size also changes. add this)
Supponi che il tuo video sia di 10 minuti. Il video viene riprodotto fino a 5 minuti e l'orientamento cambia, si sa che ha suonato fino a 5 minuti.
È possibile salvare l'avanzamento effettivo del video in onSaveInstanceState() e ottenere i dati salvati in onRestoreInstanceState() dal pacchetto, dopodiché è possibile iniziare la riproduzione con i dati di avanzamento o dall'inizio se ci fosse nessun dato salvato
Quando l'orientamento cambia attività viene distrutta e ricreata. Se si desidera salvare i dati e mantenere si può fare come di seguito per il salvataggio di grandi set di dati
@Override
public Object onRetainNonConfigurationInstance() {
final MyDataObject data = collectMyLoadedData();
return data;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance();
if (data == null) {
data = loadMyData();
}
}
Per piccolo insieme di dati
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
// Save UI state changes to the savedInstanceState.
// This bundle will be passed to onCreate if the process is
// killed and restarted.
savedInstanceState.putString("NICK_NAME", Name);//save nick name
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Restore UI state from the savedInstanceState.
// This bundle has also been passed to onCreate.
Name = savedInstanceState.getString("NICK_NAME");//restore nick name
}
Per controllare l'orientamento
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
VideoView in Android. In questo caso anche il video viene trasmesso dal server. Controllare la risposta accettata (risposta di Commonsware). Esattamente lo stesso che ho suggerito.
Non è possibile. È come funziona il sistema. Deve rifare un sacco di lavoro e distrugge solo l'attività, per ricrearla. –
Si prega di fare riferimento a questo: http://stackoverflow.com/questions/8032475/oncreate-is-called-twice-after-the-device-is-rotated –