Autore Topic: Passaggio dati tra activity è per copia?  (Letto 2980 volte)

Offline osa100

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
Passaggio dati tra activity è per copia?
« il: 20 Novembre 2011, 12:27:54 CET »
0
Salve,
forse la questione potrà sembrarvi banale, facendo alcuni test mi sono reso conto che quando passo dati ad un'activity in questo modo:

Codice: [Seleziona]
                    Intent intent = new Intent(getApplicationContext(), GridActivity.class);
                    intent.putExtra(getPackageName() + ".mylist",picturesFolder);
                    startActivity(intent);

essi sembrano "copiati" nell'altra activity ovvero non viene passato il riferimento.

Potete confermarmi ciò. Grazie.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Passaggio dati tra activity è per copia?
« Risposta #1 il: 20 Novembre 2011, 13:26:48 CET »
0
La risposta breve, anche se imprecisa, è si.

La risposta lunga è che il passaggio di dati avviene praticamente con un "messaggio" dalla activity chiamante a quella chiamata. E' anche possibile restituire dei dati, sempre in una specie di messaggio, se per fare la chiamata usi startActivityForResult.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline osa100

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
Re:Passaggio dati tra activity è per copia?
« Risposta #2 il: 20 Novembre 2011, 14:01:17 CET »
0
La risposta breve, anche se imprecisa, è si.

La risposta lunga è che il passaggio di dati avviene praticamente con un "messaggio" dalla activity chiamante a quella chiamata. E' anche possibile restituire dei dati, sempre in una specie di messaggio, se per fare la chiamata usi startActivityForResult.

Grazie mille, per evitare questo passaggio di dati e risparmiare memoria ho letto che potrei estendere Application o implementare un singleton, però non mi è chiaro se un'activity è killata dal sistema se il singleton resta in memoria.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Passaggio dati tra activity è per copia?
« Risposta #3 il: 20 Novembre 2011, 15:56:03 CET »
0
Grazie mille, per evitare questo passaggio di dati e risparmiare memoria ho letto che potrei estendere Application o implementare un singleton, però non mi è chiaro se un'activity è killata dal sistema se il singleton resta in memoria.


In generale non puoi mai fare affidamento sulla persistenza in memoria dell'activity: su Android per definizione può essere eliminata dalla memoria in qualsiasi momento, se il sistema ritiene di dover liberare spazio. Comunque la strategia migliore dipende da quanti dati spedisci e da qual'è la loro natura.  :-)
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline osa100

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
Re:Passaggio dati tra activity è per copia?
« Risposta #4 il: 20 Novembre 2011, 17:09:54 CET »
0
Grazie bradipao. La mia perplessità è su ciò che può essere definito un dato di un activity.
Consideriamo:

Codice: [Seleziona]
public class ActivityA{

public void onCreate(Bundle b){
 Singleton s = Singleton.getInstance();
  s.createData();
}
}public class ActivityB{

public void onCreate(Bundle b){
 Singleton s = Singleton.getInstance();
  s.readData();
}
}

ActivityA usa una classe Singleton per creare dati, ActivityB usa la stessa classe Singleton per leggere i dati creati dall'ActivityA.
Ammettiamo che android deallochi l'ActivityA per motivi di spazio, che fine fa la classe Singleton?

Offline liuk78

  • Utente junior
  • **
  • Post: 73
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Passaggio dati tra activity è per copia?
« Risposta #5 il: 21 Novembre 2011, 12:33:21 CET »
0
...... cut ......

che fine fa la classe Singleton?


Il singleton rimane in vita in quanto non è legato alla classe A, nella classe A tu stai semplicemente richiedendo un'istanza.
Qui mi sembra spiegato bene.   ;-)
http://www.javabeginner.com/learn-java/java-singleton-design-pattern

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Passaggio dati tra activity è per copia?
« Risposta #6 il: 21 Novembre 2011, 12:40:28 CET »
0
Se ti serve una forte persistenza dei dati (persino ai riavvii) e i dati non sono molti, usa le sharedpreferences.
Se ti basta che i dati siano trasmessi tra le activity, usa gli intent.

Come detto prima, la soluzione dipende da che genere di dati devi gestire.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Passaggio dati tra activity è per copia?
« Risposta #7 il: 21 Novembre 2011, 13:27:56 CET »
+1
Il singleton rimane in vita in quanto non è legato alla classe A, nella classe A tu stai semplicemente richiedendo un'istanza.
Qui mi sembra spiegato bene.   ;-)
http://www.javabeginner.com/learn-java/java-singleton-design-pattern

Piccola precisazione: attenzione che su android non è possibile in alcun modo creare un singleton, quindi attenzione a come si usa.

E' possibile affermare che il Singleton resta in vita per un tempo limitato, ma non è affatto vero che il singleton resta in memoria per sempre (come da pattern standard).

La garbage collection del framework android, infatti, non funziona in modo "standard" e fa pulizia anche di oggetti allocati che non vengono utilizzati per un tot di tempo (solitamente alto, ma non preciso).

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Passaggio dati tra activity è per copia?
« Risposta #8 il: 21 Novembre 2011, 13:32:00 CET »
0
La risposta breve, anche se imprecisa, è si.

La risposta lunga è che il passaggio di dati avviene praticamente con un "messaggio" dalla activity chiamante a quella chiamata. E' anche possibile restituire dei dati, sempre in una specie di messaggio, se per fare la chiamata usi startActivityForResult.

Aggiungo qualche dettaglio alla già ottima spiegazione di bradipao.

Il passaggio non potrà mai avvenire per riferimento (tanto che gli Object che è possibile passare negli Extras devono essere Parcellable o Serializable) per il semplice motivo che l'Activity chiamata non è detto che stia all'interno dello stesso package android (sottolineo android e non java!!!) e che quindi i due contesti stiano fisicamente su due virtual machine dalvik diverse che quindi non possono condividere aree di memoria.

Offline liuk78

  • Utente junior
  • **
  • Post: 73
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Passaggio dati tra activity è per copia?
« Risposta #9 il: 21 Novembre 2011, 13:46:36 CET »
0
Piccola precisazione: attenzione che su android non è possibile in alcun modo creare un singleton, quindi attenzione a come si usa.

E' possibile affermare che il Singleton resta in vita per un tempo limitato, ma non è affatto vero che il singleton resta in memoria per sempre (come da pattern standard).

La garbage collection del framework android, infatti, non funziona in modo "standard" e fa pulizia anche di oggetti allocati che non vengono utilizzati per un tot di tempo (solitamente alto, ma non preciso).

Grazie per la precisazione.  :-)

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:Passaggio dati tra activity è per copia?
« Risposta #10 il: 21 Novembre 2011, 14:30:49 CET »
0
Aggiungo qualche dettaglio alla già ottima spiegazione di bradipao.

Il passaggio non potrà mai avvenire per riferimento (tanto che gli Object che è possibile passare negli Extras devono essere Parcellable o Serializable) per il semplice motivo che l'Activity chiamata non è detto che stia all'interno dello stesso package android (sottolineo android e non java!!!) e che quindi i due contesti stiano fisicamente su due virtual machine dalvik diverse che quindi non possono condividere aree di memoria.

Non la sapevo questa.. pensavo che su Android anche se dalvik diverse la memoria fosse condivisa...
Immagino che siano 2 cose diverse ma per esempio il copia ed incolla allora utilizza altro tipo di passaggio...
scusate la divagazione tra activity e copia ed incolla ma l' argomento è molto interessante
La domanda stupida è quella che non si fa

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Passaggio dati tra activity è per copia?
« Risposta #11 il: 21 Novembre 2011, 14:45:33 CET »
0
Non la sapevo questa.. pensavo che su Android anche se dalvik diverse la memoria fosse condivisa...
Immagino che siano 2 cose diverse ma per esempio il copia ed incolla allora utilizza altro tipo di passaggio...
scusate la divagazione tra activity e copia ed incolla ma l' argomento è molto interessante

Beh il ClipboardManager è un servizio di sistema quindi praticamente tu hai un servizio che espone un'interfaccia aidl e che funge da memoria condivisa.

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Passaggio dati tra activity è per copia?
« Risposta #12 il: 21 Novembre 2011, 14:57:52 CET »
0
Beh il ClipboardManager è un servizio di sistema quindi praticamente tu hai un servizio che espone un'interfaccia aidl e che funge da memoria condivisa.

Senza contare il fatto che quello che passi è un oggetto String quindi Serializable!  8-)

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:Passaggio dati tra activity è per copia?
« Risposta #13 il: 21 Novembre 2011, 15:01:51 CET »
0
Grazie. Pensavo fosse gestito più a basso livello anzi non mi ero mai soffermato sulla gestione del copia ed incolla tra le app :)
La domanda stupida è quella che non si fa

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Passaggio dati tra activity è per copia?
« Risposta #14 il: 21 Novembre 2011, 15:15:20 CET »
0
Grazie. Pensavo fosse gestito più a basso livello anzi non mi ero mai soffermato sulla gestione del copia ed incolla tra le app :)

In ogni caso, fare un copia ed incolla con "riferimento" sarebbe un errore di sicurezza non trascurabile... da implosione dell'universo!  o_O