1

So habe ich diese Aktivität mit einer doSomething() -Methode. Diese Methode muss aufgerufen werden, wenn der Benutzer die Aktivität verlässt und nach einer Weile fortfährt. Dieser Code funktioniert gut. Das Problem ist: Wenn der Benutzer das Telefon dreht (Orientierungsänderung), wird auch die Methode aufgerufen. Ich möchte nicht, dass die Methode auf Orientierungsänderung aufgerufen wird. Hier ist mein AktivitätscodeUmgang mit Rotationsänderungen und Benutzer verlassen Aktivität

public class MainActivity extends AppCompatActivity 
{ 
    private static boolean callMethod=true; 
    @Override 
    protected void onResume() { 
     super.onResume(); 
     if(callMethod) 
      doSomething(); 
    } 
    @Override 
    protected void onPause() { 
     super.onPause(); 
     callMethod=true; 
    } 

private void doSomething() 
{ 
    Log.i(“doSomething()”,”Did something.”); 
} 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     if(callMethod) 
      doSomething(); 
    } 

} 

Vielen Dank im Voraus!

Antwort

1

Von API 13 können Sie configChanges in Manifest verwenden.

Fügen Sie dem Manifest Folgendes hinzu. Dies verhindert die Wiederherstellung der Aktivität bei der Bildschirmdrehung:

<activity android:name=".Activity_name" 
android:configChanges="orientation|keyboardHidden"> 

Eine Anmerkung ist danach, sollten Sie Bildschirmausrichtung selbst ändern. Sie sollten die folgende Funktion in Ihrer Tätigkeit außer Kraft dafür:

public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){ 
     setContentView(R.layout.layout_landscape); 
    } 
    else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     setContentView(R.layout.layout);   
    } 
} 
+2

Nur das Hinzufügen dieser Zeile zum Manifest funktionierte nicht. Aber es hat geholfen. Ich habe auch hinzugefügt, wenn (! IsChangingConfigurations()) callMethod = true; und jetzt funktioniert es perfekt. Vielen Dank –

1

ich in Ihrem Kommentar sehen, dass Sie die isChangingConfigurations() Flagge hinzugefügt, die den Trick tun sollte, aber man sollte lieber diesen Zustand anhalten als so dass es ein statische Variable. Andernfalls, wenn Ihr Prozess beendet wird, wenn Ihre App in den Hintergrund tritt, verlieren Sie diesen Status.

public class MainActivity extends AppCompatActivity { 
    private static final String KEY_CALL_METHOD = "key_call_method"; 

    private boolean callMethod = true; 

    @Override 
    protected void onCreate(Bundle savedState) { 
     super.onCreate(savedState); 
     setContentView(R.layout.activity_main); 

     if (savedState != null) { 
      callMethod = savedState.getBoolean(KEY_CALL_METHOD); 
     } 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     if (callMethod) { 
      doSomething(); 
     } 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     if (!isChangingConfigurations()) { 
      callMethod = true; 
     } 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putBoolean(KEY_CALL_METHOD, callMethod); 
    } 

    private void doSomething() { 
     Log.i("doSomething()", "Did something."); 
    } 
}