Autore Topic: Processi background Android  (Letto 622 volte)

Offline ingmarcofilippini

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung
  • Sistema operativo:
    Windows 10
Processi background Android
« il: 08 Agosto 2017, 14:42:31 CEST »
0
Ciao a tutti,
ho un problema su Android Studio.

Ho creato due activity (MainActivity e Main2Activity).

In una determinata situazione MainActivity passa a Main2Activity.

In questo passaggio ho messo nell'onPause di MainActivity la funzione worker.finish() che va a chiudere i processi dell'activity.. questa funzione però è lenta ad essere eseguita (prima che Main2Activity si avvii passano circa 6/7 secondi che questa funzione chiuda tutto)...

è possibile quindi eseguire questa funzione in un altro momento? ad esempio quando è già stata avviata la Main2Activity... oppure in background non so come si faccia..

grazie in anticipo.

Offline Tiru

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows 10
Re:Processi background Android
« Risposta #1 il: 08 Agosto 2017, 14:55:49 CEST »
0
Usa finish(); subito dopo aver "startato" la seconda Activity, senza usare OnPause, facendo ciò lo smartphone chiude direttamente la prima Activity e passa alla Seconda:
dovrebbe farlo subito senza aspettare 6/7 secondi
ex.

Codice (Java): [Seleziona]
Intent i = new Intent(this,Main2Acitvity.class);
startActivity(i);
finish();

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 773
  • Respect: +161
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Processi background Android
« Risposta #2 il: 16 Agosto 2017, 09:33:33 CEST »
0
Nella onPause, invece di invocare direttamente worker.finish(), avvia un AsynkTask che lo invochi in modo asincrono
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline ingmarcofilippini

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung
  • Sistema operativo:
    Windows 10
Re:Processi background Android
« Risposta #3 il: 27 Agosto 2017, 19:52:04 CEST »
0
Usa finish(); subito dopo aver "startato" la seconda Activity, senza usare OnPause, facendo ciò lo smartphone chiude direttamente la prima Activity e passa alla Seconda:
dovrebbe farlo subito senza aspettare 6/7 secondi
ex.

Codice (Java): [Seleziona]
Intent i = new Intent(this,Main2Acitvity.class);
startActivity(i);
finish();


Ho provato il tuo codice ma non funziona.

Io prima usavo questo e funzionava:
Codice (Java): [Seleziona]
public void onEvento() {
startActivity(new Intent(MainActivity.this, Main2Activity.class));
}


Ho usato il tuo codice così ma non va:
Codice (Java): [Seleziona]
public void onEvento() {
Intent i = new Intent(this,Main2Acitvity.class);
startActivity(i);
finish();}
[/quote]

AndroidStudio mi dà questi due errori:

Error:(39, 12) error: no suitable constructor found for Intent(<anonymous MotionDetectorCallback>,Class<Main2Activity>)

constructor Intent.Intent(String,Uri) is not applicable

(argument mismatch; <anonymous MotionDetectorCallback> cannot be converted to String)

constructor Intent.Intent(Context,Class<?>) is not applicable

(argument mismatch; <anonymous MotionDetectorCallback> cannot be converted to Context)


Error:Execution failed for task ':app:compileDebugJavaWithJavac'.

> Compilation failed; see the compiler error output for details.


Offline iClaude

  • Utente normale
  • ***
  • Post: 299
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Processi background Android
« Risposta #4 il: 28 Agosto 2017, 15:53:37 CEST »
0
Ti sei dimenticato il
MainActivity.this
Hai usato solo this...

Evidentemente ti trovi in una classe interna quindi il this non si riferisce alla Activity.
Usa
MainActivity.this per creare l'intent.

Offline ingmarcofilippini

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung
  • Sistema operativo:
    Windows 10
Re:Processi background Android
« Risposta #5 il: 01 Settembre 2017, 14:53:04 CEST »
0
Ti sei dimenticato il
MainActivity.this
Hai usato solo this...

Evidentemente ti trovi in una classe interna quindi il this non si riferisce alla Activity.
Usa
MainActivity.this per creare l'intent.

Non funziona ancora  :-o Quando passo il mouse su Main2Activity.class mi dice: Cannot resolve symbol Main2Activity.

Cosa faccio? Grazie

Offline m.caroccia83

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
Re:Processi background Android
« Risposta #6 il: 02 Settembre 2017, 17:11:34 CEST »
0
Vuoi la mia....
inizia a passare a Kotlin come linguaggio (ormai Java è obsoleto :))
Quindi utilizza RxJava per gestire i processi in background o puoi più semplicemente utilizzare Kovenant di Mark Platvoet (ovviamente in Kotlin: https://github.com/mplatvoet/kovenant) per semplificarti la vita.

Esempio Kovenant:

override fun onPause() {
  super.onPause()
  task {
    // Mio processo di 6/7 secondi o 10minuti :)
  } successUi {
    // Tutto ok
  } failUi {
    // Qualcosa è andato storto :)
  }
}

Potresti anche eventualmente se non vuoi utilizzare Kovenant utilizzare la lib KAndroid (https://github.com/pawegio/KAndroid) che ha diverse utils tra cui anche un metodo runAsync per eseguire semplici task in background senza gestione delle eccezioni:

Esempio KAndroid:

override fun onPause() {
  super.onPause()
  runAsync {
    // Mio processo di 6/7 secondi o 10minuti :)
  }
}

Ciao, Massimo

Offline iClaude

  • Utente normale
  • ***
  • Post: 299
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Processi background Android
« Risposta #7 il: 02 Settembre 2017, 17:21:43 CEST »
0
Non funziona ancora  :-o Quando passo il mouse su Main2Activity.class mi dice: Cannot resolve symbol Main2Activity.

Cosa faccio? Grazie

Nel codice che hai postato c'è un errore di battitura:
Main2Acitvity.class

Offline ingmarcofilippini

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung
  • Sistema operativo:
    Windows 10
Re:Processi background Android
« Risposta #8 il: 04 Settembre 2017, 18:38:48 CEST »
0
Nel codice che hai postato c'è un errore di battitura:
Main2Acitvity.class

Hai ragione!!! Ora funziona, ma non come dovrebbe funzionare :(

Quando si deve avviare la Main2Activity ci mette tanto comunque (mostra una schermata nera, poi bianca e ci mette 6/7 secondi ad avviare la Main2Activity).

Questo tempo lungo me lo fa solamente quando imposto finish(); e mi fa creare private void finish() {finish();}
Senza questa funzione non ci sono ritardi, però l'app non funziona come dovrebbe in quanto non termina i processi dell'activity.

Offline iClaude

  • Utente normale
  • ***
  • Post: 299
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Processi background Android
« Risposta #9 il: 04 Settembre 2017, 18:42:29 CEST »
0
Non ho ben capito cosa sono questi "processi" della prima Activity che vai a terminare... :-\

Offline ingmarcofilippini

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung
  • Sistema operativo:
    Windows 10
Re:Processi background Android
« Risposta #10 il: 04 Settembre 2017, 20:14:23 CEST »
0
Non ho ben capito cosa sono questi "processi" della prima Activity che vai a terminare... :-\

In pratica nella MainActivity c'è un rilevatore di movimento di cui il codice è in Movimento.java
A me servirebbe terminare Movimento.Java

Devo terminare il file perchè altrimenti quando torna su quella activity non funziona come deve essere.
Non so bene quale funzione devo terminare (non l'ho fatto io il rilevatore di movimento), quindi termino tutto il file Movimento.java

Però facendo come ho fatto adesso ci mette tanto, troppo a chiudere.

Ho reso bene l'idea? Scusami  se ho scritto incasinato.
Grazie