web-dev-qa-db-ja.com

Androidでのコールバック?

Androidアプリケーション開発では、多くの場所でCallBackという単語を頻繁に使用します。技術的に説明することの意味と、どのように使用できるかを知りたいです。アプリケーションではcallback。それを理解して使用するためのガイドが必要です。

19
Praveen

それが何を意味するのか知りたいのですが、技術的に教えてください

http://en.wikipedia.org/wiki/Callback_%28computer_science%29

「Javaなどの関数値引数のないオブジェクト指向プログラミング言語では、[コールバック]は、抽象クラスまたはインターフェイスを渡すことでシミュレートできます。受信者は1つ以上のメソッドを呼び出し、呼び出し側は具体的な実装を提供します。 。このようなオブジェクトは、事実上、コールバックのバンドルに加えて、操作する必要のあるデータです。これらは、Visitor、Observer、Strategyなどのさまざまな設計パターンを実装するのに役立ちます。」

アプリケーションのコールバックを管理する方法

これが何を意味するのかわかりません。

15
CommonsWare

うーん。例はどうですか。クイックソートアルゴリズムをCで記述します。アルゴリズムを使用するユーザーは、ユーザーがアルゴリズムでソートしているものに適した比較メソッドを提供する必要があります。ユーザーは、ユーザーのcompareメソッドへの関数ポインターをクイックソートコードに渡す必要があります。クイックソートコードは、このアドレス、関数ポインターを使用して、ユーザーの比較関数にコールバックします。ソートされているものの通常性を判断する方法がわからない可能性があるため、実装ではなく関数プロトタイプを提供します。ユーザーは、ユーザーが何をソートしているかに意味のある比較の実装を提供します。この実装は、関数プロトタイプと一致する必要があります。関数ポインタは、クイックソートアルゴリズムによって使用され、ユーザーのコードに戻ってタッチします。

これは実際にはポリモーフィズムについてです。

Javaでは、インターフェースを使用してこれを行うことができます。したがって、ソートについては、インターフェースIComparerおよびIComparableを参照してください。

6
JAL

Callableインターフェースを使用して、Runnableと同じようにコードを実行できます。ただし、Callableは結果を返すことができ、checked例外をスローできます。

詳細については。 http://developer.Android.com/reference/Java/util/concurrent/Callable.html

Callableインターフェイスを使用すると、関数として引数を渡すことができます。理解するために簡単なコードスニペットを追加しました。

public class MainActivity<V> extends Activity {


    Callable<String> doLogin=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        doLogin=new Callable<String>() {  //created but not called now.

            @Override
            public String call() throws Exception {

                //make some piece of code
                return "something"; //or false
            }
        };

        CheckSession checkSession=new CheckSession("sessionName");
        String sessionKey="";


        try {  //we are sending callable to the DAO or any class we want 
             sessionKey=checkSession.getSessionKey(doLogin);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}



public class CheckSession{


    String sessionName="";
    Callable<String> func=null;

    public CheckSession(String sessionName) {
        super();
        this.sessionName = sessionName;

    }

    public String getSessionKey(Callable<String> doLogin) throws Exception{

        func=doLogin;

        return (String) func.call();

    }

}
4
huseyin