Autore Topic: Chiudere un'activity  (Letto 5490 volte)

Offline leon84

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
Chiudere un'activity
« il: 15 Febbraio 2011, 12:00:07 CET »
0
Salve,
la mia app ha 2 activity.
La prima è composta essenzialmente da una listview che a seconda dell'item selezionato passa determinati parametri alla seconda activity.
Se premo il tasto home vorrei che l'applicazione terminasse e invece succede che viene messa in pausa. Infatti quando ritorno dalla home all'applicazione mi viene visualizzata l'ultima activity attiva prima della chiusura.
In che modo è possibile avviare la propria applicazione sempre dall'inizio? e cioè dalla prima activity ?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Chiudere un'activity
« Risposta #1 il: 15 Febbraio 2011, 14:16:42 CET »
0
sovrascrivi l'onPause e mettici dentro un bel finish()

Offline Agosteeno

  • Utente normale
  • ***
  • Post: 152
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson - Xperia Neo
  • Sistema operativo:
    Ubuntu 11.04
Re:Chiudere un'activity
« Risposta #2 il: 04 Settembre 2012, 10:45:50 CEST »
0
Scusate se mi intrometto dopo tanto tempo, ma vorrei un piccolo chiarimento: sovrascrivendo l'onpause() come dici tu non ci sarebbe la possibilita' di "tornare all'indietro" durante l'esecuzione? Mi spiego meglio in un caso dove e' piu' evidente: se ci sono per esempio 5 acitivity (immaginate un form con vari step) e in ognuna si effettua l'operazione di sovrascrivere l'onpause() sarebbe ancora vero che chidendo l'app si reinizia con la prima, ma se per esempio durante l'esecuzione dallo step 4 volessi tornare allo step2 non potrei, perche' non appena si passa da un'activity all'altra viene appunto richiamato l'onpause che chiude l'activity.
O sbaglio? Se invece volessi ottenere l'effetto di eseguire la finish() solo quando viene premuto il tasto home come si potrebbe fare?
Ho visto che acitivity ha un metodo onBackPressed() che si potrebbe sfruttare, ma rimarrebbe il problema che l'activity viene terminata quando va' in background.
Risparmia l'acqua, bevi birra...

Offline Yeti82

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • http://www.linkedin.com/in/agostinopesapane
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy SII GT-9100
  • Sistema operativo:
    Windows 7
Re:Chiudere un'activity
« Risposta #3 il: 16 Settembre 2012, 21:22:33 CEST »
0
Se ho ben capito da questo link
https://groups.google.com/forum/?fromgroups#!topic/android-developers/AiGd2pWCXTQ
il tasto HOME è un tasto speciale che non può essere intercettato.

E' possibile tentare di intercettare la pressione del tasto home:

Codice (Java): [Seleziona]
void keyPressed() {
   // parte del codice...

   if (key == CODED && keyCode == KeyEvent.KEYCODE_HOME){
   // sovrascrivi il tasto home
   }
}

Tuttavia non è sicuro che Android prenda in considerazione queste istruzioni.
Provare e verificare!

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Chiudere un'activity
« Risposta #4 il: 16 Settembre 2012, 22:29:56 CEST »
0
E' scritto nella documentazione:

Citazione
Key code constant: Home key. This key is handled by the framework and is never delivered to applications.

KeyEvent | Android Developers
adb logcat | tee /tmp/logcat | grep TAG

Offline Yeti82

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • http://www.linkedin.com/in/agostinopesapane
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy SII GT-9100
  • Sistema operativo:
    Windows 7
Re:Chiudere un'activity
« Risposta #5 il: 17 Settembre 2012, 16:33:30 CEST »
0
Allora, una volta accertato che non è possibile sovrascrivere il tasto home, una possibile soluzione potrebbe essere quella di verificare se la tua applicazione è in background.

Ho trovato questo link in cui hanno implementato una funzione che controlla quando l' applicazione è in background e restituisce un valore booleano (true/false).

Attraverso questo valore potresti decidere di chiamare il finish() e terminare l' applicazione.
Ovviamente dovresti mettere questo controllo in onPause, onStop, onDestroy per essere sicuro di controllare tutti i possibili stati dell' applicazione.

Non riporto il codice perchè primo non è mio e secondo non proviene da questo sito, e di conseguenza non potrei attribuire meriti.

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Chiudere un'activity
« Risposta #6 il: 20 Settembre 2013, 17:59:47 CEST »
0
Mi ricollego a questo topic dicendo che avrei la stessa esigenza di terminare le activity che apro e che restano in background nel momento in cui effettuo il ONBACKPRESSED().
il metodo è stato riscritto inserendo  anche finish() ma le activity non terminano. Mi potete aiutere??

Offline Yeti82

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • http://www.linkedin.com/in/agostinopesapane
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy SII GT-9100
  • Sistema operativo:
    Windows 7
Re:Chiudere un'activity
« Risposta #7 il: 20 Settembre 2013, 20:22:04 CEST »
0
to filipposapo:
Per gestire la chiusura delle applicazioni in background, sovrascrivere il metodo onBackPressed() non è sufficiente. Ogni activity ha diversi stati nel suo ciclo di vita. Ognuno di questi stati ha un comportamento predefinito che può essere sovrascritto.

I metodi onPause() e onStop() di ogni activity, determinano il comportamento quando non sono attive sullo schermo. Ti basta riscrivere questi metodi in ogni activity per gestirne il funzionamento.

Esempio:

Codice (Java): [Seleziona]
@Override
        protected void onPause() {
               
                super.onPause();
                finish();
        }

Questo è come ho riscritto il metodo onPause() per la schermata di presentazione di un APP.
La schermata di presentazione mostra il logo dell' APP poi passa all'activity vera e propria dell' APP.
Appena va in pausa per passare alla main activity viene terminata e non sarà disponibile nell' history di navigazione.

onPause() : L' activity sta girando ma non è sullo schermo
onStop() : L'activity è ferma probabilemente perché hai premuto Home o sei uscito dall' APP premendo il tasto Back sulla main activity

A seconda del metodo che sovrascrivi avrai differenti comportamenti.
Se sovrascrivi tutti gli onPause() in questo modo, ogni volta che cambierai schermata (activity) non sarai in grado di tornare indietro perché la precedente sarà stata terminata.

Se sovrascrivi onStop() nella main activity ti assicuri che quando esci dalla schermata principale, la APP viene chiusa. In questo modo mantieni la navigazione tra le schermate (activity) ma quando esci ti assicuri di terminare tutto.

Ti lascio il codice dell' onStop():

Codice (Java): [Seleziona]
@Override
        protected void onStop() {
               
                super.onStop();
                finish();
        }

Spero di esserti stato utile!  :-)
« Ultima modifica: 20 Settembre 2013, 20:25:03 CEST da Yeti82 »

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Chiudere un'activity
« Risposta #8 il: 20 Settembre 2013, 21:57:38 CEST »
+1
Prova ad utilizzare nel Manifest android:clearTaskOnLaunch="true"

<activity> | Android Developers

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Chiudere un\'activity
« Risposta #9 il: 23 Settembre 2013, 12:55:08 CEST »
0
Grazie ad entrambi.
Ho usato il secondo metodo e funziona perfettamente thanks!!

Post unito: 24 Settembre 2013, 16:05:25 CEST
Scusate ancora, ho utilizzato il secondo metodo e tutto mi funziona, tranne se però ho due activity una dentro l'altra. Mi spiego meglio: se dalla home entro in una activity che ne richiama una'altra e da quest'ultima torno direttamente alla home, resta comunque aperta l'activity intermedia. Come posso risolvere?
Grazie infinitamente. e complimenti per l'efficienza e la conoscenza
« Ultima modifica: 24 Settembre 2013, 16:05:25 CEST da filipposapo, Reason: Merged DoublePost »

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Chiudere un\'activity
« Risposta #10 il: 26 Settembre 2013, 11:50:50 CEST »
0
Continuo ad avere questo problema come posso risolvere??

Post unito: 26 Settembre 2013, 16:36:51 CEST
l'activity centrale dovrebbe essere di passaggio per cui riscrivendo i metodi onStop e OnResume non funziona bene.
« Ultima modifica: 26 Settembre 2013, 16:36:51 CEST da filipposapo, Reason: Merged DoublePost »

Offline uglyicons

  • Utente junior
  • **
  • Post: 88
  • UglyIcons - Great Apps (perlomeno ci proviamo)
  • Respect: +3
    • Mostra profilo
    • La mia app: EML Reader FREE
  • Dispositivo Android:
    Huawei Honour
  • Play Store ID:
    UglyIcons
  • Sistema operativo:
    Win
Re:Chiudere un'activity
« Risposta #11 il: 27 Settembre 2013, 16:18:18 CEST »
0
Con il metodo di GabMarioPower ripartendo non ti riparte con la sola activity centrale ?
EML Reader FREE
Apri file e allegati EML e MSG da qualsiasi fonte.
Download su Play Store!

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Chiudere un'activity
« Risposta #12 il: 27 Settembre 2013, 16:53:33 CEST »
0
quello che accade e che se io dall'activity centrale (quella che si apre subito dopo il main) torno indietro questa rimane aperta..non so se perchè non ha svolto tutte le funzionalità visto che li c'è il paring con dei dispositivi bluetooth che ci sono o non si chiude perchè va aggiunto qualcosa.

Offline uglyicons

  • Utente junior
  • **
  • Post: 88
  • UglyIcons - Great Apps (perlomeno ci proviamo)
  • Respect: +3
    • Mostra profilo
    • La mia app: EML Reader FREE
  • Dispositivo Android:
    Huawei Honour
  • Play Store ID:
    UglyIcons
  • Sistema operativo:
    Win
Re:Chiudere un'activity
« Risposta #13 il: 27 Settembre 2013, 17:06:51 CEST »
0
E quindi settando
android:clearTaskOnLaunch="true"
comunque riparte dalla activity centrale ?

Oppure ti accorgi da qualche indizio che sta ancora girando ?
EML Reader FREE
Apri file e allegati EML e MSG da qualsiasi fonte.
Download su Play Store!

Offline filipposapo

  • Utente junior
  • **
  • Post: 135
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Tablet Samsung Note 10.1
  • Sistema operativo:
    Windows 8
Re:Chiudere un'activity
« Risposta #14 il: 27 Settembre 2013, 17:09:13 CEST »
0
me ne accorgo perche se poi torno nel main e premo back si apre l'activity intermedia e poi ritorno nuovamente al main prima di uscire, mentre invece dal main dovrei uscire direttamente.