Ho un problema concettuale con una corretta implementazione del codice che sembra richiedere un'ereditarietà multipla, che non sarebbe un problema in molti linguaggi OO, ma poiché il progetto è per Android, non esiste una cosa come multiplo extends
.
Ho un sacco di attività, derivate da diverse classi di base, come semplice Activity
, TabActivity
, ListActivity
, ExpandableListActivity
, ecc. Inoltre ho alcuni frammenti di codice che devo inserire in onStart
, onStop
, onSaveInstanceState
, onRestoreInstanceState
e altri gestori di eventi standard in tutte le attività.
Se ho una singola classe base per tutte le attività, inserisco il codice in una speciale classe derivata intermedia e quindi creo tutte le attività estendendola. Sfortunatamente, questo non è il caso, perché ci sono più classi base. Ma posizionare le stesse porzioni di codice in diverse classi intermedie non è un modo per andare, imho.
Un altro approccio potrebbe essere quello di creare un oggetto helper e delegare tutte le chiamate degli eventi summenzionati all'helper. Ma ciò richiede che l'oggetto helper sia incluso e che tutti i gestori vengano ridefiniti in tutte le classi intermedie. Quindi non c'è molta differenza per il primo approccio qui - ancora molti duplicati di codice.
Se si verifica una situazione simile sotto Windows, sottoclassi la classe base (qualcosa che "corrisponde" alla classe Activity
in Android) e intrappoli lì i messaggi appropriati (in un unico posto).
Cosa si può fare in Java / Android per questo? So che ci sono strumenti interessanti come strumentazione Java ( con alcuni esempi reali ), ma non sono un guru di Java e non sono sicuro che valga la pena provare in questo caso specifico.
Se mi mancassero altre soluzioni decenti, per favore, citale.
UPDATE:
Per coloro che potrebbero essere interessati a risolvere lo stesso problema in Android, ho trovato una soluzione semplice. Esiste la classe Application , che fornisce, tra le altre cose, l'interfaccia ActivityLifecycleCallbacks . Fa esattamente ciò di cui ho bisogno permettendoci di intercettare e aggiungere qualche valore in eventi importanti per tutte le attività. L'unico inconveniente di questo metodo è che è disponibile a partire dal livello API 14, che in molti casi non è sufficiente (il supporto per il livello API 10 è un requisito tipico oggi).