android - onnewintent - oncreate ondestroy




Differenza tra onPause e onStop() (4)

Essere in primo piano significa che l'attività ha un focus di input. Ad esempio, un'attività può essere visibile ma parzialmente oscurata da una finestra di dialogo focalizzata. In tal caso, onPause() verrà chiamato, ma non onStop() . Quando la finestra di dialogo scompare, verrà chiamato il metodo onResume() dell'attività (ma non onStart() ).

Da Android doc qui http://developer.android.com/reference/android/app/Activity.html , si dice "L'attività entra in primo piano" chiamerà onPause() , e "L'attività non è più visibile" chiamerà onStop() .

Non è "L'attività entra in primo piano" come "L'attività non è più visibile"? Puoi dirmi per favore qual è la differenza tra loro?


Il seguente diagramma mostra i percorsi importanti dello stato di un'attività. I rettangoli quadrati rappresentano i metodi di callback che è possibile implementare per eseguire operazioni quando l'attività si sposta tra gli stati. Gli ovali colorati sono gli stati principali in cui può svolgersi l'attività.


Se è ancora possibile vedere qualsiasi parte di essa (l' Activity arriva in primo piano o non occupa tutto lo schermo, o è piuttosto trasparente), verrà chiamato onPause() . Se non riesci a vederne alcuna parte, verrà chiamato onStop() .

Una finestra di dialogo **, ad esempio, potrebbe non coprire l'intera Activity precedente, e questo sarebbe il momento di onPause() .

** Non mi riferisco a un Dialogo Android qui, piuttosto un'idea concettuale di qualcosa che si apre e oscura solo parte dello schermo utente. Questa nota è stata aggiunta per chiarire in base a un commento di @GMsoF di seguito


Yeap, cerco di capire e posso spiegarlo qui sotto:

Ci sono 2 attività: ActivityA & ActivityB

public class ActivityA extends Activity implements OnClickListener {

// button
private Button mBtnChangeActivity;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_a);
    initialize();
    setEvent();
}

private void initialize() {
    Log.i("Activity A", "Initialize()");
    mBtnChangeActivity = (Button) findViewById(R.id.btn_change_activity);
}

private void setEvent() {
    Log.i("Activity A", "setEvent()");
    mBtnChangeActivity.setOnClickListener(this);
}

@Override
protected void onStart() {
    super.onStart();
    Log.i("Activity A", "onStart");
}

@Override
protected void onResume() {
    super.onResume();
    Log.i("Activity A", "onResume");
}

@Override
protected void onPause() {
    super.onPause();
    Log.i("Activity A", "onPause");
}

@Override
protected void onStop() {
    super.onStop();
    Log.i("Activity A", "onStop");
}

@Override
protected void onDestroy() {
    super.onDestroy();
    Log.i("Activity A", "onDestroy");
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.btn_change_activity:
        Intent activityB = new Intent(this, ActivityB.class);
        startActivity(activityB);
        break;
    default:
        break;
    }
}

Ecco l'attività B. Segui il mio commento nel codice

public class ActivityB extends Activity implements OnClickListener {

// button
private Button mBtnChangeActivity;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_a);
    initialize();
    setEvent();
    // if call finish() here, activityA will don't stop, just pause
    // Activity A will call onStop() when Activity B call onStart() method
    finish();
}

private void initialize() {
    Log.i("Activity B", "Initialize()");
    mBtnChangeActivity = (Button) findViewById(R.id.btn_change_activity);
}

private void setEvent() {
    Log.i("Activity B", "setEvent()");
    mBtnChangeActivity.setOnClickListener(this);
}

@Override
protected void onStart() {
    super.onStart();
    Log.i("Activity B", "onStart");
}

@Override
protected void onResume() {
    super.onResume();
    Log.i("Activity B", "onResume");
}


@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.btn_change_activity:
        finish();
        break;
    default:
        break;
    }
}
}

Spero che questo sia chiaramente





android-lifecycle