Come faccio ad evitare che durante l'avvio di un'attività venga chiamata onCreate ()?

Voglio ricaricare un'attività dalla pila.

Utilizzo startActivity() per avviare nuove attività. Quando sono in attività D voglio ricaricare l' attività A e non avviare una nuova intenzione. Non riesco a utilizzare startActivity() quando chiami A da D perché spara su onCreate() che inizia un thread per recuperare alcuni dati.

  • ADT 22.2 Creazione guidata nuova applicazione: dipendenza template non supportta: aggiornare il tuo plug-in Android Eclipse
  • Come utilizzare la session registrata quando si passa da un'attività all'altra
  • Creazione di un nuovo Google Calendar
  • come puoi sapere quando un'attività Android è terminata?
  • Come posso immaginare le immagini usando sharedpreference in android?
  • Quale ambiente di programmazione mobile ti consigliamo per una destinazione di avvio?
  • EDIT : Aggiornato lo stack.

    Se utilizzo FLAG_ACTIVITY_REORDER_TO_FRONT , ricall nuovamente il metodo onCreate() .

    Di seguito è il mio scenario.

     Login Activity ̣→ Activity A → Activity B → Activity C → Activity D → Activity A 

    Come faccio a evitare che si onCreate() ?

  • Android: LocationManager vs Google Play Servizi
  • Dove trovare Reference_Ids per Firebase Cloud Messaging?
  • Carica l'image sul server
  • get l'ultima chiamata su CallLog usando un servizio
  • Come creare un layout scorrevole e un layout zoomable in un'applicazione Android?
  • come modificare il colore del text dell'indicatore delle tabs in android?
  • 5 Solutions collect form web for “Come faccio ad evitare che durante l'avvio di un'attività venga chiamata onCreate ()?”

    Devi prendere un approccio totalmente diverso. Non import se si avvia l'attività con startActivity() o startActivityForResult() perché onCreate() , onStart() e onResume() verranno chiamati quando si avvia un'attività.

    Ora se hai un metodo nella tua class Attività che inizia un altro thread per fare un po 'di lavoro allora devi lavorare con le bandiere. Se l'attività richiede di avviare automaticamente il thread alla prima esecuzione, è necessario avvolgerlo attorno ad una clausola se cercare una bandiera impostata al momento della prima esecuzione.

    L'idea è di avere la tua attività impostata come booleana a true nell'istanza Application o in SharedPreferences quando il thread viene eseguito per la prima volta. Quando si torna a tale attività e non si desidera che il thread venga eseguito automaticamente a causa di essere chiamati onCreate() allora è necessario avvolgere il codice di chiamata attorno a una clausola se come nell'esempio riportto di seguito.

    Ecco un esempio.

     @Override public void onCreate(Bundle bundle) { super.onCreate(bundle); // Other stuff if (!YourApplicationInstance.wasCalled) { // Run your thread or do something else you want to do only once. // Set the wasCalled flag to true to not run this code again // if onCreate() is called a second time. YourApplicationInstance.wasCalled = true; } } 

    Dovnetworking leggere l' utilizzo dell'applicazione contestuale ovunque? per capire come implementare la mia pseudo class YourApplicationInstance .

    c'è un tag denominato launchMode per l'attività nel manifesto. verifica questo collegamento . e questo non chiamerà Crea, ma chiamerà NewIntent, where puoi reinizializzare roba.

    Il seguente non è vero. startActivityForResult () e startActivity () differiscono solo nell'objective di return dell'attività chiamata

    prova a utilizzare startActivityForResult () piuttosto che startActivity (). Credo che questo non finisca completamente l'attività e riprenderlo. Raccommand di utilizzare questo collegamento per leggere ulteriormente come implementare un metodo simile.

    Quindi il punto 2 di @Kgrover non tiene troppo.

    La bandiera Intent http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_REORDER_TO_FRONT fa esattamente questo.

    Tieni d'occhio le bandiere Intent each volta che hai requisiti centrati sulle transizioni di attività. Il sistema ha un ottimo supporto.

    Questo equivale alla soluzione di Sam Quest, l'unica differenza è che se si imposta il launchMode , il comportmento dello stack dell'attività è codificato, vale a dire che la tua attività A è sempre nella modalità singleTask .

    1) Anche se non sono sicuro, puoi provare a utilizzare startActivityForResult () piuttosto che startActivity (). Credo che questo non finisca completamente l'attività e riprenderlo. Raccommand di utilizzare questo collegamento per leggere ulteriormente come implementare un metodo simile.

    2) In alternativa, quando si va dall'attività D -> A, continuare ad usare startActivity (), ma passare in un dummy extra. Quindi nell'attività A, utilizzare un'istruzione if:

      if(!(this.getIntent().hasExtra("dummyStringExtra")) { //fire the data thread here } 

    Saluti. Spero che aiuti.

     @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: this.finish(); return true; } return super.onOptionsItemSelected(item); } 

    Questo ucciderà l'attività del bambino. Quindi l'attività dei genitori non è ricreata

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.