2011-01-22 3 views
0

Есть ли способ перехвата всякий раз, когда приложение создает новый экземпляр Activity? Меня интересуют только действия, связанные с процессом Application, а не все мероприятия по телефону. Есть ли способ сделать это? Является ли класс Application вовлеченным в это каким-то образом? Какие методы можно переопределить, чтобы получить экземпляр Activity после его создания?Есть ли способ перехватить действие Android после его создания?

+0

Зачем вам это нужно (если, конечно, это не коммерческая тайна)? Я едва ли могу представить себе случай, когда это хорошо спроектированное приложение. –

+0

Я не знаю, имеет ли значение, почему на данный момент, но это так, мы можем легче проектировать хорошо разработанные приложения. :-) У меня есть идея, и я хочу изучить ее, и мне нужна эта функция, чтобы сделать это. – chubbsondubs

ответ

2

Хорошо, просто идея - в вашем приложении вы можете создать базовый класс активности, чтобы все остальные действия были подклассифицированы из этой базовой активности. Тогда в onCreate() обратного вызова вы можете сообщить некоторый экземпляру слушателя о факте создание нового экземпляра приложения активности:

public class BaseActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // put the code to notify a listener here 
    } 

} 

public class YourWorkingActivity extends BaseActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ... 
    } 
} 

Если вы используете ListActivity (который является общим для среднего приложения для Android), то вы должны также создать аналогичная BaseListActivity для него.

Скорее всего, лучшим кандидатом для слушателя будет подкласс Application, так как он гарантируется ОС, которая будет создана до того, как будет создан экземпляр Activity.

Предупреждение: вы должны избегать ссылки на активность в слушателе, поскольку она создаст утечку памяти, когда ОС попытается убить это действие (как часть жизненного цикла активности или процесса) , Вероятно, для этого используйте WeakReference.

+0

Да, я понимаю, что могу создать суперкласс, который мог бы либо оповестить о создании, либо фактически сделать логику, которую я планирую реализовать. Причина, по которой я не горячая, - это точная причина, по которой вы указываете ListActivity vs. Activity. Досадно, что архитекторы Android чрезмерно полагаются на наследование в качестве основы для повторного использования для своих фреймворков. Сообщество Java перестало делать это, как в 2001 году. Ну, толпа EJB не подошла к ней до 2007 года. На самом деле я просто подумал о другом способе решения этой проблемы, не требуя подкласса. Благодарю. Иногда он просто разговаривает с кем-то. – chubbsondubs