Перехватчик активности - PullRequest
4 голосов
/ 18 января 2011

Есть ли в Android способ перехватить вызовы метода активности (только стандартные, например, "onStart. OnCreate")?У меня есть много функций, которые должны присутствовать в каждом действии в моем приложении, и (поскольку оно использует различные типы действий (Список, Предпочтения)), единственный способ сделать это - создать свои собственные расширения для каждого класса действий, которыеотстой: (* ​​1001 *

PS Я использую roboguice, но поскольку Dalvik не поддерживает генерацию кода во время выполнения, я думаю, это не очень помогает.

PSS Я думал об использовании AspectJ, но этослишком много хлопот, так как это требует много сложностей (сборка муравья ant.xml и все такое барахло)

Ответы [ 3 ]

5 голосов
/ 12 февраля 2011

Релиз roboguice 1.1.1 включает некоторую базовую поддержку событий для компонентов, внедренных в контекст. См. http://code.google.com/p/roboguice/wiki/Events для получения дополнительной информации.

Например:

@ContextScoped
public class MyObserver {
  void handleOnCreate(@Observes OnCreatedEvent e) {
    Log.i("MyTag", "onCreated");
  }
}

public class MyActivity extends RoboActivity {
  @Inject MyObserver observer;  // injecting the component here will cause auto-wiring of the handleOnCreate method in the component.

  protected void onCreate(Bundle state) {
    super.onCreate(state); /* observer.handleOnCreate() will be invoked here */
  }
}
2 голосов
/ 21 января 2011

Вы можете делегировать всю повторяющуюся работу другому классу, который будет встроен в ваши другие действия. Таким образом, вы ограничиваете повторяющуюся работу созданием этого объекта и вызовом его методов onCreate, onDestroy.

class MyActivityDelegate {
    MyActivityDelegate(Activity a) {}

    public void onCreate(Bundle savedInstanceState) {}
    public void onDestroy() {}
}

class MyActivity extends ListActivity {
    MyActivityDelegate commonStuff;

    public MyActivity() {
        commonStuff = MyActivityDelegate(this);
    }

    public onCreate(Bundle savedInstanceState) {
        commonStuff.onCreate(savedInstanceState);
        // ...
    }
}

Это сводит к минимуму хлопоты и учитывает все распространенные методы и элементы вашей деятельности. Другой способ сделать это - создать подклассы всех классов API XXXActivty: (

0 голосов
/ 31 января 2013

Посмотрите на http://code.google.com/p/android-method-interceptor/, он использует прокси Java.

...