Eu tenho um problema conceitual com uma implementação adequada de código que parece exigir herança múltipla, que não seria um problema em muitas linguagens OO, mas como o projeto é para Android, não existe algo como múltiplo extends.
I têm um grupo de actividades, derivadas a partir de diferentes classes de base, tais como simples Activity, TabActivity, ListActivity, ExpandableListActivity, etc. Também I tem alguns fragmentos de código que eu necessidade de colocar em onStart, onStop, onSaveInstanceState, onRestoreInstanceStatee outros processadores de eventos normais em todas as actividades.
Se eu tiver uma única classe base para todas as atividades, colocaria o código em uma classe derivada intermediária especial e criaria todas as atividades estendendo-o. Infelizmente, esse não é o caso, porque existem várias classes base. Mas colocar as mesmas partes do código em várias classes intermediárias não é um caminho, imho.
Outra abordagem poderia ser criar um objeto auxiliar e delegar todas as chamadas dos eventos mencionados acima ao auxiliar. Mas isso requer que o objeto auxiliar seja incluído e que todos os manipuladores sejam redefinidos em todas as classes intermediárias. Portanto, não há muita diferença para a primeira abordagem aqui - ainda há muitas duplicatas de código.
Se uma situação semelhante ocorresse no Windows, eu subclasseia a classe base (algo que "corresponde" à Activityclasse no Android) e capturaria as mensagens apropriadas (em um único local).
O que pode ser feito em Java / Android para isso? Eu sei que existem ferramentas interessantes, como instrumentação Java ( com alguns exemplos reais ), mas não sou um guru de Java e não tenho certeza se vale a pena tentar neste caso específico.
Se eu perdi outras soluções decentes, mencione-as.
ATUALIZAR:
Para aqueles que podem estar interessados em resolver o mesmo problema no Android, encontrei uma solução simples. Existe a classe Application , que fornece, entre outras coisas, a interface ActivityLifecycleCallbacks . Faz exatamente o que eu preciso, permitindo-nos interceptar e agregar algum valor em eventos importantes para todas as atividades. A única desvantagem desse método é que ele está disponível a partir do nível 14 da API, o que não é suficiente em muitos casos (o suporte ao nível 10 da API é um requisito típico hoje).
decordator pattern. Este é um último recurso, que, na verdade, demonstra o que eu preferiria evitar - duplicação de código. Aceitarei sua resposta, se nenhuma outra ideia interessante aparecer. Posso usar genéricos para generalizar o código dos "intermediários"?