Bagian ini menjelaskan metode dan error antarmuka.
Metode kosong
Metode yang tidak menampilkan hasil diterjemahkan ke dalam metode Java yang
tampilkan void
. Misalnya, deklarasi HIDL:
doThisWith(float param);
... menjadi:
void doThisWith(float param);
Metode hasil tunggal
Metode yang menampilkan hasil tunggal diterjemahkan ke dalam bahasa Java-nya atau setara yang juga menampilkan satu hasil. Misalnya, berikut ini:
doQuiteABit(int32_t a, int64_t b, float c, double d) generates (double something);
... menjadi:
double doQuiteABit(int a, long b, float c, double d);
Metode multi-hasil
Untuk setiap metode yang menampilkan lebih dari satu hasil, class callback adalah
yang menyediakan semua hasil dalam metode onValues
-nya.
Callback tersebut bertindak sebagai parameter tambahan pada metode. Misalnya,
berikut ini:
oneProducesTwoThings(SomeEnum x) generates (double a, double b);
... menjadi:
public interface oneProducesTwoThingsCallback { public void onValues(double a, double b); } void oneProducesTwoThings(byte x, oneProducesTwoThingsCallback cb);
Pemanggil oneProducesTwoThings()
biasanya akan menggunakan
class dalam atau lambda anonim untuk mengimplementasikan callback secara lokal:
someInstanceOfFoo.oneProducesTwoThings( 5 /* x */, new IFoo.oneProducesTwoThingsCallback() { @Override void onValues(double a, double b) { // do something interesting with a and b. ... }});
atau:
someInstanceOfFoo.oneProducesTwoThings(5 /* x */, (a, b) -> a > 3.0 ? f(a, b) : g(a, b)));
Anda juga dapat menentukan class yang akan digunakan sebagai callback ...
class MyCallback implements oneProducesTwoThingsCallback { public void onValues(double a, double b) { // do something interesting with a and b. } }
... dan meneruskan instance MyCallback
sebagai parameter ketiga ke
oneProducesTwoThings()
.
Error saat transportasi dan penerima kematian
Karena implementasi layanan dapat berjalan dalam proses yang berbeda, dalam beberapa kasus
klien dapat tetap hidup bahkan ketika proses
yang mengimplementasikan antarmuka dihentikan.
Panggilan pada objek antarmuka yang dihosting dalam proses mati yang gagal dengan transpor
error (pengecualian runtime yang ditampilkan oleh metode yang dipanggil). Pemulihan dari
gagal dimungkinkan dengan meminta {i>instance<i}
layanan baru dengan memanggil
I<InterfaceName>.getService()
. Namun, metode ini berfungsi
hanya jika proses yang error telah dimulai ulang dan mendaftarkan ulang layanannya
dengan servicemanager (yang umumnya berlaku untuk implementasi HAL).
Klien antarmuka juga dapat mendaftarkan penerima kematian untuk mendapatkan
notifikasi saat layanan berhenti berfungsi. Error transportasi masih bisa terjadi jika panggilan
dibuat ketika server mati. Untuk mendaftar notifikasi tersebut pada panggilan yang diambil
IFoo
, klien dapat melakukan hal berikut:
foo.linkToDeath(recipient, 1481 /* cookie */);
Parameter recipient
harus berupa implementasi
antarmuka HwBinder.DeathRecipient
yang disediakan oleh HIDL. Antarmuka
berisi satu metode serviceDied()
yang dipanggil saat
maka proses {i>hosting<i} antarmuka
tersebut akan mati.
final class DeathRecipient implements HwBinder.DeathRecipient { @Override public void serviceDied(long cookie) { // Deal with service going away } }
Parameter cookie
berisi cookie yang diteruskan dengan
panggilan ke linkToDeath()
. Dimungkinkan juga untuk membatalkan
pendaftaran kematian
penerima setelah mendaftarkannya menggunakan:
foo.unlinkToDeath(recipient);