4

Androidでアクティビティメソッドの呼び出しを傍受する方法はありますか(「onStart.onCreate」などの標準的なもののみ)? アプリのすべてのアクティビティに存在する必要がある多くの機能があり、(さまざまな種類のアクティビティ (リスト、設定) を使用するため) それを行う唯一の方法は、すべてのアクティビティ クラスのカスタム拡張機能を作成することです。最悪:(

PS 私は roboguice を使用していますが、Dalvik は実行時のコード生成をサポートしていないため、あまり役に立たないと思います。

PSS AspectJ を使おうと思ったのですが、複雑な作業が多いので面倒です (ant の build.xml とそのすべてのジャンク)。

4

3 に答える 3

5

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 */
  }
}
于 2011-02-12T08:18:06.077 に答える
2

すべての繰り返し作業を、他のアクティビティに組み込まれる別のクラスに委任できます。このようにして、反復作業をこのオブジェクトの作成とその 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);
        // ...
    }
}

これにより、手間が最小限に抑えられ、すべての一般的なメソッドとアクティビティのメンバーが因数分解されます。もう 1 つの方法は、すべての API の XXXActivty クラスをサブクラス化することです:(

于 2011-01-21T12:12:12.093 に答える
0

http://code.google.com/p/android-method-interceptor/を見てください。これは、Javaプロキシを使用しています。

于 2013-01-31T04:31:23.220 に答える