2010-02-12 12 views
7

Nella mia app ho ricevuto un oggetto non attivo il cui ruolo è rappresentato da una classe manager. molte volte ho bisogno di passare "attività sorgente" a metodi come parametro a quella classe manager per fare alcune operazioni su quella attività.Passare correttamente l'attività all'oggetto non attivo

per esempio, supponiamo di avere MyActivity che deve fare un brindisi. quindi ho questa classe di gestione chiamato MyManager, e ho questo metodo in essa

raiseToast(Activity sourceActivity) { 

    Toast.makeText(sourceActivity, demo, Toast.LENGTH_LONG).show(); 
} 

e dalla classe Myactivity abbiamo chiamare quel metodo in questo modo:

MyManager manager=new MyManager(); 
manager.raiseToast(MyActivity.this); 

funziona benissimo.

Quello che sto chiedendo qui, è un modo corretto per passare un'attività come parametro per un oggetto non attivo? Sto avendo una perdita di memoria sul dispositivo reale (non l'emulatore), mi chiedo se questo potrebbe anche causarne una ragione?

Grazie Idan.

risposta

3

Si può provare a passare il contesto dell'applicazione che è getApplicationContext() sull'attività. Perché hai questo oggetto MyManager? Puoi semplicemente aumentare il brindisi dall'attività senza averlo in una classe separata. Spostare il metodo raiseToast() sul corpo dell'attività e chiamarlo semplicemente.

EDIT: si prega di leggere http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html

+1

Sì naturalmente in questo caso è più o meno stupido, lo jus ha dato un esempio, quando ho bisogno di passare l'attività corrente a qualche oggetto non l'attività, in questo caso è davvero inutile, ma in altri casi, potrebbe essere necessario separare la logica interna dal gui (MVC) quindi come si farebbe in modo esatto in questo modo di getApplicationContext()? Grazie – rayman

+0

Come devo inviare il parametro dall'attività di chiamata e come devo impostare il parametro nella classe manager? Grazie. – rayman

+0

getApplicationContext() è un metodo di contesto. Quindi è possibile sostituire manager.raitetoast (MyActivity.this); con manager.raitetoast (getApplicationContext()); –

Problemi correlati