Domanda

Nel mio app Android, ho un'attività principale che funge da punto di ingresso per la mia domanda, che è configurato nel mio file manifesto in questo modo:

<activity android:name=".Main"
              android:label="@string/app_name"
              android:screenOrientation="portrait"
              android:alwaysRetainTaskState="true"
              android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Quindi, per un particolare caso d'uso, consente di dire che un utente avvia l'applicazione dalla schermata iniziale facendo clic sull'icona all'interno di avvio delle applicazioni. Dopo aver avviato l'applicazione, l'utente si sposta dalla attività principale per l'attività A e poi finalmente l'attività B. A questo punto, l'utente decide di controllare la loro facebook, quindi fare clic sul pulsante a casa per mettere la mia app in background, e lanci l'applicazione Facebook.

Dopo aver verificato la loro facebook, l'utente vuole tornare al mio app, in modo da premere il tasto Home, e lanciare l'applicazione dal lanciatore di applicazioni (proprio come hanno fatto per la prima volta è stato lanciato).

Quando un utente torna alla mia app, voglio l'applicazione per tornare l'ultima attività l'utente era a quando l'applicazione è stata messa in secondo piano, che in questo caso è l'attività B. Nel file manifest, ho impostato alwaysRetainTaskState = true per assicurarsi che il sistema operativo non uccide le attività di mio app.

Ora alla mia domanda: come faccio ad avere il comportamento che ho descritto sopra? Ogni volta che clicco sull'icona della mia app, si inizia sempre l'attività principale, non importa quale. Credo che questo sia perché dell'attributo category.LAUNCHER. Ho provato android: launchMode = singleTask, ma non ha fatto la differenza; si inizia sempre principale.

Se qualcuno potesse chiarire filtri intenti, le modalità di lancio, e le attività, che sarebbe grande!

È stato utile?

Soluzione

Ho risolto questo aggiungendo il DispatcherActivity screenless e rendendolo quella predefinita (utilizzando lo stesso filtro di intenti). Nel suo metodo onCreate si crea e si chiama l'intenti sulla base di alcuni di default ragionevole (l'attività principale per esempio) o sulla base di alcuni di token che identifica salvati cui l'attività deve essere avviato. Questo token viene salvato / aggiornato in modo onStop di qualsiasi attività che si desidera chiamare al riavvio. È possibile salvare questo token a Preferenze.

Il razionale è che lo scorso attività che era visibile eseguirà onStop metodo quando interrotta.

parola di cautela qui: ho fatto implementare questo schema e ha funzionato abbastanza bene. Tuttavia non sembra giocare troppo bene con la storia e alla fine ho appena rinunciato e tirò fuori questo codice. Nessuno si è lamentato finora.

Altri suggerimenti

FYI singleTask non è ciò che si vuole, dal momento che inizia una nuova attività:

http://developer.android.com/guide/ argomenti / manifesto / attività-element.html # lMode

Come stai lanciando Attività B? Qualsiasi non standard modalità di lancio o bandiere Intent?

Per chiunque venendo qui con problemi simili, ho trovato qualcosa di strano che potrebbe essere ciò che state vedendo ... forse.

Dire che ho un app con le attività di A -> B -> C ecc ho avuto problemi con la mia app sempre "riprendere" per A se è stato lanciato dalla lista di app launcher aka. Ripresa dalla "risente" schermo (premere a lungo a casa) sarebbe un comportamento corretto curriculum anche se (per riprendere la B o C come previsto). Il mio manifesto era niente di speciale, ho alwaysRetainTaskState = "true" impostato nella mia attività principale, e la modalità di lancio è (di serie).

di default

Stavo caricando l'apk sul mio telefono tramite un sito web . Dopo il download e l'installazione, vorrei premere "Apri" per avviare l'applicazione subito. Per qualche motivo (dopo la disinstallazione dell'applicazione) mi stanco a scaricare di nuovo, l'installazione, ma poi ho premuto il pulsante "Done", invece . Poi lanciare l'applicazione dal programma di avvio / "Tutte le applicazioni" lista ha lo stesso comportamento curriculum come il ripristino dalla Recenti - in altre parole i miei problemi sono stati causati in qualche modo a causa del processo di installazione quando si fa clic su "Apri" invece di "Fatto"

Ho verificato questa "soluzione" on API10 (2.3.5) e API15 (4.0.4)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top