Есть ли способ перехвата всякий раз, когда приложение создает новый экземпляр Activity? Меня интересуют только действия, связанные с процессом Application, а не все мероприятия по телефону. Есть ли способ сделать это? Является ли класс Application вовлеченным в это каким-то образом? Какие методы можно переопределить, чтобы получить экземпляр Activity после его создания?Есть ли способ перехватить действие Android после его создания?
ответ
Хорошо, просто идея - в вашем приложении вы можете создать базовый класс активности, чтобы все остальные действия были подклассифицированы из этой базовой активности. Тогда в 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.
Да, я понимаю, что могу создать суперкласс, который мог бы либо оповестить о создании, либо фактически сделать логику, которую я планирую реализовать. Причина, по которой я не горячая, - это точная причина, по которой вы указываете ListActivity vs. Activity. Досадно, что архитекторы Android чрезмерно полагаются на наследование в качестве основы для повторного использования для своих фреймворков. Сообщество Java перестало делать это, как в 2001 году. Ну, толпа EJB не подошла к ней до 2007 года. На самом деле я просто подумал о другом способе решения этой проблемы, не требуя подкласса. Благодарю. Иногда он просто разговаривает с кем-то. – chubbsondubs
Зачем вам это нужно (если, конечно, это не коммерческая тайна)? Я едва ли могу представить себе случай, когда это хорошо спроектированное приложение. –
Я не знаю, имеет ли значение, почему на данный момент, но это так, мы можем легче проектировать хорошо разработанные приложения. :-) У меня есть идея, и я хочу изучить ее, и мне нужна эта функция, чтобы сделать это. – chubbsondubs