2013-07-17 19 views
5

Mi piace sapere alcuni articoli di baseCome utilizzare le variabili statiche in modo efficiente?

Sto sviluppando un'applicazione Android e quindi mi portano a problemi di gestione della memoria. Guardato di recente un video relativo alla gestione della memoria da parte di Google ho scoperto che l'uso di una variabile statica in un'attività causa perdite di memoria anche in cambio di orientamento dell'attività in quanto mantiene i riferimenti ad altri oggetti nell'attività, L'uomo in video diceva che usando statico variabile con l'aiuto di un metodo statico risolverà il problema, mi piacerebbe sapere come un metodo statico risolverà il problema?

mi piace conoscere il modo migliore per utilizzare variabile statica nella mia richiesta, per esempio ho una classe globale in cui I negozi di alcune variabili statiche come indica il nome di questi valori saranno valutati e modificati da diverse attività, Come un esempio che hanno una larghezza variabile statica e attualmente aggiorno simili

Global.WIDTH = 12

o scarica come int width = Global.WIDTH da diverse attività, questo è un metodo corretto, o devo usare un statico metodo per ottenere la larghezza come int width = Global.getWidth();, allora qual è la differenza tra questi due, qual è il modo migliore per farlo,

quali sono altre cose importanti che dobbiamo tenere a mente quando si tratta di variabili statiche?

a tutti e scusate Grazie per la lunga descrizione ...

+0

Utilizzare 'static' quando il campo/metodo deve appartenere alla classe e non a qualsiasi riferimento a un oggetto. Se usato in 'Activity's, raccomanderei l'uso di' static final' per dichiarare il campo come costante invece di avere un semplice campo 'statico '. –

+0

Grazie per la rapida risposta .. Non posso dichiararlo definitivo perché il suo valore cambierà come per dispositivo basato su un calcolo –

+1

Puoi dichiararlo come 'statico finale 'e definire i valori in un metodo' static {} '. Si noti che questi valori, anche se sono * dinamici *, devono * essere * caricati una sola volta nell'avvio dell'applicazione, non in qualsiasi momento dell'applicazione. Se si desidera avere larghezza e altezza diverse per la visualizzazione orizzontale, aggiungere altri due campi invece di ricalcolare i valori. –

risposta

1

variabili statiche possono causare perdite di memoria, perché non saranno mai andare fuori portata, ma se hai solo pochi primitivi come int o lunghi allora non avrai problemi.

È necessario fare attenzione se si inizia a fare riferimento a oggetti in variabili statiche, in particolare raccolte. Se una raccolta non va mai fuori dal campo di applicazione, nessuno degli oggetti contenuti in essa contenuti e nessuno degli oggetti a cui si riferiscono, quindi c'è la possibilità che la collezione continui a crescere e consumare più memoria.

La variabile nella tua domanda, presumibilmente un int, sarà OK però.

+0

Grazie Nick per la risposta, ho usato l'int per un esempio, mi piace sapere fare alcuna differenza tra l'utilizzo di campi statici e metodi statici –

+1

Non riesco a pensare a nessuna implicazione della memoria con l'utilizzo di metodi statici . L'unica differenza tra Global.width e Global.getWidth() è che il metodo ti consentirà di calcolare il valore quando chiamato. Qualsiasi variabile dichiarata e utilizzata nel metodo non causerà una perdita di memoria poiché esse escono dall'ambito non appena termina il metodo. – NickJ

Problemi correlati