Questo alla fine arriverà alla tua domanda, ma voglio prima affrontare una serie di problemi che sollevi nei tuoi vari commenti alle varie risposte già fornite al momento della stesura di questo scritto. Non ho intenzione di cambiare idea - piuttosto, questi sono qui per gli altri che verranno a leggere questo post in futuro.
Il punto è che non posso consentire ad Android di determinare quando verrà terminata la mia app. quella deve essere la scelta dell'utente.
Milioni di persone sono perfettamente soddisfatte del modello in cui l'ambiente chiude l'applicazione in base alle esigenze. Questi utenti semplicemente non pensano a "terminare" l'app per Android, non più di quanto non pensino a "terminare" una pagina Web o "terminare" un termostato.
Gli utenti di iPhone sono più o meno allo stesso modo, in quanto premendo il pulsante iPhone non si "sente" necessariamente che l'app è stata terminata, dal momento che molte app per iPhone riprendono da dove si era interrotto l'utente, anche se l'app era davvero chiusa (dal momento che solo iPhone consente al momento un'app di terze parti alla volta).
Come ho detto sopra, ci sono molte cose che stanno succedendo nella mia app (i dati vengono SPINTI sul dispositivo, elenchi con attività che dovrebbero sempre essere lì, ecc.).
Non so che cosa significhi "elenchi con attività che dovrebbero sempre essere presenti", ma i "dati che vengono spinti sul dispositivo" sono una finzione piacevole e non dovrebbero essere svolti da un'attività in ogni caso. Utilizzare un'attività pianificata (tramite AlarmManager
) per aggiornare i dati per la massima affidabilità.
I nostri utenti accedono e non possono farlo ogni volta che ricevono una telefonata e Android decide di uccidere l'app.
Ci sono molte applicazioni iPhone e Android che si occupano di questo. Di solito, è perché mantengono le credenziali di accesso, anziché forzare gli utenti ad accedere ogni volta manualmente.
Ad esempio, vogliamo verificare gli aggiornamenti all'uscita dall'applicazione
Questo è un errore su qualsiasi sistema operativo. Per quanto ne sai, il motivo per cui la tua applicazione viene "chiusa" è perché il sistema operativo si sta spegnendo e quindi il processo di aggiornamento fallirà a metà flusso. In generale, non è una buona cosa. Controlla gli aggiornamenti all'avvio o controlla gli aggiornamenti in modo totalmente asincrono (ad esempio, tramite un'attività pianificata), mai all'uscita.
Alcuni commenti suggeriscono che premere il pulsante Indietro non uccide affatto l'app (vedi link nella mia domanda sopra).
La pressione del pulsante INDIETRO non "uccide l'app". Termina l'attività visualizzata sullo schermo quando l'utente preme il pulsante INDIETRO.
Dovrebbe terminare solo quando gli utenti vogliono terminarlo, mai e poi mai in altro modo. Se non riesci a scrivere app che si comportano così in Android, penso che Android non possa essere utilizzato per scrivere app reali = (
Quindi nemmeno le applicazioni Web possono farlo. O WebOS , se capisco correttamente il loro modello (non ho ancora avuto modo di giocarci con uno). In tutti questi, gli utenti non "terminano" nulla - se ne vanno e basta. iPhone è un po 'diverso, in quanto attualmente consente di eseguire solo una cosa alla volta (con poche eccezioni), quindi l'atto di partire implica una chiusura abbastanza immediata dell'app.
C'è un modo per me di chiudere davvero l'applicazione?
Come tutti gli altri ti hanno detto, gli utenti (tramite BACK) o il tuo codice (tramite finish()
) possono chiudere l'attività attualmente in esecuzione. Gli utenti in genere non hanno bisogno di nient'altro, per le applicazioni scritte correttamente, non più di quanto abbiano bisogno di un'opzione "quit" per l'utilizzo delle applicazioni Web.
Non esistono due ambienti applicativi uguali, per definizione. Ciò significa che puoi vedere le tendenze negli ambienti quando ne sorgono di nuove e altre vengono seppellite.
Ad esempio, c'è un movimento crescente per cercare di eliminare la nozione di "file". La maggior parte delle applicazioni Web non obbliga gli utenti a pensare ai file. Le app per iPhone in genere non obbligano gli utenti a pensare ai file. Le app Android in genere non obbligano gli utenti a pensare ai file. E così via.
Allo stesso modo, c'è un movimento crescente per cercare di eliminare l'idea di "terminare" un'app. La maggior parte delle applicazioni Web non obbliga l'utente a disconnettersi, ma piuttosto a disconnettersi in modo implicito dopo un periodo di inattività. Stessa cosa con Android e, in misura minore, iPhone (e forse WebOS).
Ciò richiede una maggiore enfasi sulla progettazione delle applicazioni, concentrandosi sugli obiettivi aziendali e non attenersi a un modello di implementazione legato a un precedente ambiente applicativo. Gli sviluppatori che non hanno il tempo o la tendenza a farlo saranno frustrati da ambienti più nuovi che rompono il loro modello mentale esistente. Non è colpa di nessuno dei due ambienti, non più di quanto sia colpa di una montagna per i temporali che vi circolano piuttosto che attraverso.
Ad esempio, in alcuni ambienti di sviluppo, come Hypercard e Smalltalk, l'applicazione e gli strumenti di sviluppo sono stati riuniti in un'unica configurazione. Questo concetto non ha attirato molto, al di fuori delle estensioni linguistiche alle app (ad esempio, VBA in Excel , Lisp in AutoCAD ). Gli sviluppatori che hanno escogitato modelli mentali che presumevano l'esistenza di strumenti di sviluppo nell'app stessa, quindi, hanno dovuto cambiare il loro modello o limitarsi agli ambienti in cui il loro modello sarebbe stato vero.
Quindi, quando scrivi:
Insieme ad altre cose disordinate che ho scoperto, penso che lo sviluppo della nostra app per Android non accadrà.
Sembrerebbe essere il meglio, per te, per ora. Allo stesso modo, ti consiglierei di non tentare di eseguire il porting della tua applicazione sul Web, poiché alcuni degli stessi problemi che hai segnalato con Android troverai anche nelle applicazioni Web (ad esempio, nessuna "terminazione"). O, al contrario, un giorno se si fa porta la vostra applicazione per il Web, è possibile che il flusso dell'applicazione Web può essere una migliore corrispondenza per Android, ed è possibile rivedere una porta Android a quel tempo.