2016-02-24 11 views
5

Ho trovato che il mio metodo onStop() verrà chiamato con un ritardo inferiore a 10 secondi. Non ho mai visto prima questo comportamento.Android - onStop() verrà chiamato con un ritardo

Nota: - L'attività è singleTop e comincia con Intent.FLAG_ACTIVITY_REORDER_TO_FRONT bandiera.

Nota: - Uso gli strumenti di compilazione v23.0.2.

Il ritardo non era precedente e il metodo sarebbe stato chiamato immediatamente.

+0

Potresti elaborare un po 'di più? Quale attività inizia quale? Come suppongo ci siano almeno 2 attività in questa domanda. –

+0

@TinTran Accetto. Si prega di fornire maggiori dettagli concreti. – JohnWatsonDev

+0

hai eseguito il debug del tuo codice ??Per favore, elabora la tua domanda, incolla dello snippet di codice con logcat. Ci aiuterà a capire il problema esatto. –

risposta

2

Immagino che stai iniziando un'altra attività e ti aspetti che l'attività corrente riceva un callback onStop(). Secondo lo activity lifecycle, il metodo onPause() viene chiamato prima di onStop(). In alcuni casi, onSaveInstance() viene anche chiamato prima del metodo onStop(). Inoltre, quando si chiama startActivity o startActivityForResult (di nuovo, suppongo che sia per questo che si aspetta che onStop venga chiamato), a seconda dei parametri che vengono passati, se questi parametri devono essere calcolati/recuperati/etc, potrebbe Prenditi un po 'di tempo prima che il sistema possa eseguire startActivity, che sarebbe il primo che Android avvierebbe le chiamate del ciclo di vita. In assenza di qualsiasi codice qui, non è possibile vedere cos'altro viene eseguito prima che venga chiamato onStop. Suggerisco di controllare la timeline per il tempo di esecuzione del codice, a partire da startActivity e quando onStop viene chiamato, magari registrando i timestamp per ogni chiamata, iniziando con il timestamp appena prima della chiamata startActivity, terminando con il timestamp all'inizio del onStop, per vedere dove è trascorso il tempo. Suggerisco anche di semplificare questo assicurandosi che tutti i parametri per startActivity o startActivityForResult siano precedentemente impostati sui loro valori, se non è già il caso.

0

può essere emulatore è lento oggi

ma onStop() dovrebbe essere chiamato in una sola volta come singolo comando

senza onPause() o qualsiasi cosa che viene chiamato prima di questo

0

Nel mio caso, mi fermo lettore video quando viene invocato il numero onStop(), ma il richiamo di onStop() ha un ritardo di 10 secondi.

Si può usare qualcosa di simile EventBus, RxBus per pubblicare un evento nel

Application.ActivityLifecycleCallbacks { 

    //post event here.and check the activity's Name in my targetActivity which play my video. 
    onActivityStarted() 

} 
0

Ho avuto lo stesso problema. Quando ho avviato un'attività con startActivity(), onStop() è stato chiamato esattamente 10 secondi dopo onPause().

Nel mio caso, l'attività avviata aveva un frammento, che aveva una WebView. Non ho idea del perché, ma se ho rimosso la linea seguente, il ritardo era solo di circa 2 secondi.

webView.setScrollbarFadingEnabled(false);

0

se u vuole risolvere questo problema, basta andare al manifesto e aggiungere noHistory: fedele a ur l'attività sarà chiamata su Stop ritardo di non più direttamente 10sec. ha avuto lo stesso problema in cui è stato risolto, potrebbe anche essere possibile passarlo programmaticamente in una bandiera se si desidera farlo.

Problemi correlati