### 定義
一言でいうと → デベロッパにメソードを実装してもらいたい時にinterfaceを使います。
様々な使い方がありますが、今思いつくものはこの3つだけ:
- ライフサイクル (lifecycle)
- カールバック (callbacks)
- イベントハンドラー (events handlers)
ほとんどのフレームワークのControllerクラスはライフサイクルパターン(設計モデール)を採用しています。
androidフレームワークの場合は:
デベロッパにライフサイクルを守ってもらうために、interfaceを利用します。
実装してもらいたいメソード
public interface ActivityInterface {
//一回目だけ実行
void onCreate();
//画面が表示される度に実行
void onResume();
//メモリが不足した時に実行
void onDestroy();
}
interfaceを実装したControllerクラス
public class myActivity implements ActivityInterface {
@Override
public void onCreate() {
System.out.println("onCreateが呼ばれた!");
}
@Override
public void onResume() {
System.out.println("onResumeが呼ばれた!");
}
@Override
public void onDestroy() {
System.out.println("onDestroyが呼ばれた!");
}
}
処理スピードが遅かったり、別のthreadを使ったりするとcallbackを設定すると便利です。
例:音楽のダウンロード
ダウンロード後に実装されるinterface
public interface DownloadInterface {
void onDownloadFinished(String fileName);
}
ダウンロードされるオブジェクトクラス
public class DownloadObject {
public void download(String file, DownloadInterface callback){
try {
//データー処理
Thread.sleep(1000);
//callback
callback.onDownloadFinished(file);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
ダウンロードが完了になったら、onDownloadFinishedが呼ばれる
public class TestDownload {
public static void main(String[] args) {
//オブジェクト初期化
DownloadObject object = new DownloadObject();
//download method
object.download("myMusic.mp3", new DownloadInterface(){
@Override
public void onDownloadFinished(String fileName) {
//ダウンロード後 → 実行
System.out.println(fileName + "がダウンロードされました");
}
});
}
今回は匿名クラスを使いましたが、別で定義しても問題ないです!
イベントでよく使われています (click, hover, double click, drag , drop, ...)
androidのクリックイベント
Button myButton = new Button();
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// もっと見るクリック時
System.out.println("クラックされました")
}
});