В привязке JNI для Android вы можете выставить Java-метод, такой как method(int[] intArray) {}
, на JavaScript, передать ему массив JavaScript и ожидать привязки для преобразования этого массива JavaScript в int[]
. Имеет ли Android ту же самую обработку, например, Uint8Array()
?
Является ли привязка Java JNI JavaScript эффективно передавать TypedArray/ArrayBuffer в Java в виде массива?
Ответ 1
Механизм JavaScript, который работает в Android WebView, не поддерживает Uint8Arrays или любые другие типизированные массивы (начиная с 2.3.3).
EDIT: я провел еще несколько тестов с симуляторами, и у меня есть смешанные вещи, чтобы сообщить.
С положительной стороны механизм 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), данные являются нулевыми.
То же самое и между Android 3.0 и 3.2