Эффективно ли привязка JNI JavaScript в Android передает TypedArray / ArrayBuffer в Java в виде массива? - PullRequest
11 голосов
/ 09 августа 2011

В привязке JNI для Android вы можете предоставить Java-метод, такой как method(int[] intArray) {}, JavaScript, передать ему массив JavaScript и ожидать, что привязка преобразует этот массив JavaScript в int[].Имеет ли Android ту же обработку, например, Uint8Array()?

1 Ответ

5 голосов
/ 14 октября 2011

Движок JavaScript, работающий в Android WebView, не поддерживает Uint8Arrays или любые другие типизированные массивы (по состоянию на 2.3.3).

РЕДАКТИРОВАТЬ: я провел еще несколько тестов на симуляторах и у меня естьсмешанные вещи для отчета.

С другой стороны, механизм JavaScript в Android 3.x WebView поддерживает типизированные массивы, за исключением Float64Array.

С минусовой стороны, интерфейс JNIв Java через WebView.addJavascriptInterface () не конвертирует типы вообще.Вот код, который я использовал для его проверки:

var u8arr = new Uint8Array(4);
u8arr.set([2, 3, 5, 7]);
android.log(u8arr);

И функция Java для android.log () выглядит примерно так:

public void log(final int[] data) {
    final String dataInfo = (data == null) ? "NULL" : "[" + data.length + "]";
    Log.d("JsJni", "data=" + dataInfo);
    /* ... */
}

Когда я вызывал android.log сстандартный объект JavaScript типа Array (), я получил бы ожидаемые результаты (массив, связанный с данными, преобразование типов и т. д.). Когда вызывался android.log с объектом Uint8Array (или любым другим типизированным массивом)в этом отношении, включая Int8Array, Int16Array и Int32Array), данные равны null .

То же самое между Android 3.0 и 3.2

...