CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: 9mm con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 11 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 32 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 8 su 8
Discussione:

Terminare un'applicazione

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Feb 2010
    Località
    Roma
    Messaggi
    22

    Ringraziamenti
    1
    Ringraziato 7 volte in 5 Posts
    Predefinito

    Terminare un'applicazione

    Salve a tutti,
    è da qualche mese che seguo il forum e lo trovo molto interessante e pieno di informazioni utili. Oggi mi sono deciso ad aprire una discussione perché, avendo cominciato a fare qualche piccolo esperimento con l'Android SDK, volevo porre un quesito ai numerosi guru che popolano il forum: nelle varie applicazioni di test che sto creando, ho inserito il seguente codice per terminare veramente l'applicazione (alla pressione di un bottone "Exit")
    codice:
    finish();
    Timer t = new Timer();
    t.schedule(new TimerTask() {
    	public void run() {
    		System.exit(0);
    	}
    }, CLOSE_DELAY_MSEC);
    La domanda è: vi sembra una cosa corretta?
    Il mio scopo è quello di permettere all'utente di decidere se chiudere veramente l'applicazione (senza dover ricorrere ad un task manager per doverla terminare) o lasciarla in esecuzione in background (alla 'Android') fino a che un'altra che ha bisogno di memoria non obblighi il sistema a 'scaricarla'.

    Grazie a tutti per l'attenzione!!!

  2.  
  3. #2
    Senior Droid L'avatar di Azatoth


    Registrato dal
    Apr 2009
    Località
    Misinto (MI)
    Messaggi
    568

    Ringraziamenti
    1
    Ringraziato 38 volte in 28 Posts
    Predefinito

    Ciao,
    personalmente ho sempre e soltanto fatto "finish()".

    Il motivo è da ricercare nel ciclo di vita dell'activity.
    Non c'è ragione di fare come dici secondo me.
    Che senso avrebbe killare l'applicazione senza via di scampo quando di fatto non è onere suo farlo?
    Esiste ActivityManager che fa questo e se tu gestisci tutti gli stati dell'activity in modo corretto ed appropriato, direi che forse è controproducente fare come fai tu: onResume() è meno oneroso di onCreate() fosse anche solo perchè non devi reistanziare tutto nuovamente.

    Opinione personale.
    Rimane che comunque tutto è soggettivo, sopratutto è legato al motivo per cui una determinata operazione viene fatta.

    Non ritengo un valore aggiunto quello di pretendere di gestire la morte di un'activity... quindi non lo faccio


    Google Nexus One USA
    ROM: CyanogenMod 6.1.1 - Android 2.2.1
    Radio: 5.12.00.08
    Recovery: Clockwork

    Sviluppatore di: Swapper per utenti root | Modus Operandi

    Ecco le mie app Android

  4. #3
    Baby Droid


    Registrato dal
    Feb 2010
    Località
    Roma
    Messaggi
    22

    Ringraziamenti
    1
    Ringraziato 7 volte in 5 Posts
    Predefinito

    Avevo pensato anch'io una cosa del genere, ma poi, tra il proliferare di Task Managers (se ce ne sono così tanti, a qualcosa serviranno...) e i vari consigli sul terminare le applicazioni non più usate per aumentare l'autonomia dei terminali, ho pensato che aggiungere all'applicazione stessa la possibilità di essere 'terminata', oltre a quella di essere gestita dal sistema nel suo normale ciclo di vita, fosse un di più che potesse tornare utile.
    Tra l'altro, mi è successo più di una volta che la reattività del terminale fosse peggiorata (e non di poco) da un gioco o una applicazione particolarmente pesante che, sebbene terminata, era ancora presente in memoria (e che, se 'eliminata' con un task manager, restituiva al sistema una reattività decente).

    Comunque, grazie per la tua opinione: fa sempre bene confrontare punti di vista diversi!

  5. #4
    Androidiano


    Registrato dal
    Oct 2009
    Messaggi
    97

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Se tengo premuto il tasto home, quelle che compaiono sono le applicazioni ancora attive?
    Perche se è cosi allora le applicazioni con finish non vengono chiuse.

  6. #5
    Baby Droid


    Registrato dal
    Feb 2010
    Località
    Roma
    Messaggi
    22

    Ringraziamenti
    1
    Ringraziato 7 volte in 5 Posts
    Predefinito

    Mi sembra di si, ma infatti finish() non serve a chiudere l'applicazione, ma a segnalare al sistema che se vuole può scaricarla dalla ram se ne avesse bisogno (e il sistema continua a tenerla in ram finchè non è proprio necessario rimuoverla, per evitare di doverla ricaricare se viene richiesta nuovamente dall'utente).
    Per come ho capito, Android, essendo 'figlio' di linux, ha un uso non conservativo della ram (a differenza di Windows) e quindi tende a mantenere in ram quanti più dati può, sapendo che la maggior parte di essi possono essere scaricati se necessario.
    Correggetemi se sbaglio...

  7. #6
    Shu
    Shu non è in linea
    Androidiano


    Registrato dal
    Aug 2009
    Messaggi
    158

    Ringraziamenti
    6
    Ringraziato 17 volte in 13 Posts
    Predefinito

    @DanyTheBat
    Quelli di Google sconsigliano caldamente (per non dire "vietano" ) di usare System.exit(). Devi usare solo finish() e lasciar fare al sistema la chiusura.

    I Task Killer sono utili perché ci sono delle applicazioni scritte male. Teoricamente quando un'applicazione passa in secondo piano dovrebbe (visto che il sistema glielo segnala) salvare lo stato, chiudere tutto il chiudibile e rimanere inerte.
    Molte non lo fanno, e continuano a lavorare per conto loro, per esempio aggiornandosi via rete o cercando "roba" sulla SD o chiedendo le coordinate al GPS, ecc.
    Sono queste che intasano il telefono e rallentano tutto il resto.

    Naturalmente ci sono delle eccezioni. Per esempio quando mandi in secondo piano fring non vuoi che ti disconetta dal server.

    Recentemente ho trovato un bug in WordPlayer (ma non riesco a replicarlo deterministicamente) per cui ogni tanto manda la CPU al 100% e anche mandandolo in secondo piano rimane appeso. Devo killarlo, altrimenti non riesco a fare altro.

    Bye.

  8. #7
    Androidiano L'avatar di nmesisca


    Registrato dal
    Jun 2009
    Località
    Dublin
    Messaggi
    181

    Ringraziamenti
    1
    Ringraziato 12 volte in 11 Posts
    Predefinito

    Quote Originariamente inviato da Deadly Visualizza il messaggio
    Se tengo premuto il tasto home, quelle che compaiono sono le applicazioni ancora attive?
    Perche se è cosi allora le applicazioni con finish non vengono chiuse.
    no, sono le applicazioni che hai aperto piu recentemente
    ---------------------------
    Google Nexus One
    ROM : Cyanogen 7.0.3
    Kernel : IntersectRaven AVS
    Recovery : AmonRa's 2.2.1

    Twitter

  9. #8
    Androidiano


    Registrato dal
    Oct 2009
    Messaggi
    97

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Ok, grazie a tutti per le info.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy