2011-02-07 11 views
2

「イベントコールの外部」、私はモバイルプラットフォームのエミュレーションに言語を学習するためには良いのではないけど、とにかく....Javaの私は、Javaに新しいですし、私はAndroidプラットフォーム上でそれを学び始めた

私がJavaについて質問するのは、いくつかのメソッドの "外部"呼び出しです。つまり、プログラムやチュートリアルでは、いくつかのメソッドをオーバーレイするだけで、何らかのアクションに基づいて自動的に実行されます。

これは実際にはとてもいいですが、本当に好きですが、これがどのように実装されているか知りたいと思います。 JVMはそれらを実装しなければなりませんか、あるいは何らかの形でユーザー定義可能ですか?

Androidのaxampleについては、それぞれのイベントで呼び出されるsurfaceCreated(),surfaceDestroyed()というメソッドがあります。あなたはそれを処理することができます。同様のことは、ボタンのクリック操作やさらに多くのイベントです。

Cのように、実際に何が起こったのかを手動で確認する必要があるため、これがどのように実装されているか知りたいと思います。あなたはOSによって提供されるデータによって制限されます。 JVMには事前に定義されたアクションがありますか、何かに基づいて何かを手動で行うことができますか?私はこれが奇妙な質問であることを知っていますが、実際に私にはとても奇妙なので、私はそれをうまく説明できません。 Cで主にMCU用にプログラムされていることを知っていれば私の知らないことを理解できるかもしれないので、この動作は私にとっては奇妙です。しかし私はそれが好きです。

答えて

1

これはイベント委任モデルと呼ばれます。

リスナーが登録されている場合にイベントが発生すると、適切な代理人が呼び出されます。

そのことのすべてが、この中でおっとあるとクラスの面で配られますと

オブジェクト我々は非常に単純な例からこれを理解できる心に留めておくには、ボタンのクリックを言います。

は、私はこのクラス

class MyButtonClickListener implements OnClickListener 
{ 
    public void onClick(View v) 
    { 
      //do something on button click 
    } 
} 

は今、このクラスがインタフェースを実装している参照します考えてみましょう。このクラスは、それを実装するための空のインターフェイスメソッドに本体を提供する必要があります。それ以外の場合、コードはコンパイルされません。

これは、このクラスのすべてのオブジェクトがonClickメソッドの本体を持つことを保証します。これを登録してボタンクリックを聞いてみましょう。

は私のボタンは、現在のオブジェクトbutton01が後で何か(私たちの場合は新しいMyButtonClickListenerを())を実行するオブジェクトのアドレスを持ってどこかに保持されるリストを持って考えるbutton01

button01.setOnClickListener(new MyButtonClickListener()); 

であると言います。

レイアウトマネージャは、イベントの発生時(ボタンクリック)に、このイベントをオブジェクトリスナーリストに送信してさらなるアクションを実行するようにコーディングされています。

ボタンがクリックされた後、リスナーが存在することを意味するヌルでない場合、リスナーのボタンリストがチェックされます。これでリストの参照にonClickメソッドが呼び出されます。リスナーを設定するためにsetOnCLickListenerを呼び出したので、特にonClickが呼び出されます。このメソッドのコードをチェックする場合。メソッドがOnClickListener参照を受信して​​いることがわかります。これはOnClickListenerインターフェイスを実装するクラスのオブジェクトであるため、onClickメソッドの本体を提供する必要があります。

この委任が実行されます。これは単におっとです。私はそれを良いレベルで説明できることを願っています。

0

はあなたが約2の異なるもの尋ねる:いくつかのアクションが発生したときに呼び出されますが、上書きすることができ

いくつかのメソッドを、(onResume()、...)。それらは常に(ランタイム/フレームワークによって)呼び出され、クラスがそれらをオーバーライドすると、そのメソッドの実装が呼び出されます。しかし、コードのどこかに、このメソッドの実際の呼び出しがあります。これらはvirtual methodsと呼ばれます。

登録しているボタンのクリックイベントは、類似していますが、event-driven programmingです。あなたはボタンのクリックイベントをサブスクライブ、例えば

foo.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
        ... do stuff 
      } 
} 

fooオブジェクトは、どこかその内部にOnClickListenerが保存されます。ボタンをクリックすると、内部にOnClickListenersが保存されているかどうかが調べられ、存在する場合は、それぞれのOnClick()メソッドが呼び出されます。

関連する問題