С веб-сокета приходит сообщение, в нем M на N пикселей для отрисовки. Далее код такой:
function onOpen(this) {
const canvas = <HTMLCanvasElement>document.getElementById("TheMap");
canvas.width = window.innerWidth;
canvas.height = window.innerWidth; // e.g. full screen square
const ctx = canvas.getContext("2d");
ctx.imageSmoothingEnabled = true;
this.onmessage = function(event) {
onMessage(canvas, ctx, event);
}
}
function onMessage(canvas, ctx, event) {
const reader = new FileReader();
reader.onloadend = function(evt) {
const data = <ArrayBuffer>reader.result;
const array8 = new Uint8ClampedArray(data);
PaintFrame(canvas, ctx, array8);
};
reader.readAsArrayBuffer(event.data);
}
function PaintFrame(canvas, ctx, data): void {
const width = From2Bytes(data[0], data[1]);
const height = From2Bytes(data[2], data[3]);
const imageData = new ImageData(data.slice(4), width, height);
canvas.width = width;
canvas.height = height;
ctx.putImageData(imageData, 0, 0);
}
Все это завернуто в PhoneGap и выложено как приложение. Говорят, что на старых планшетах оно через 2-3 минуты вылетает с ошибкой.
Куда копать??
Здравствуйте, Basil2, Вы писали:
У меня проект на cordova (тот же PhoneGap) тоже вылетал на старых устройствах через несколько минут интенсивной анимации.
Вылечилось после подключения плагина
https://github.com/crosswalk-project/cordova-plugin-crosswalk-webview
Таким образом у тебя в приложении всегда будет актуальная версия веб-контрола, не зависимо от версии, установленной в ОС.
Минусы — это плюс 30Мб к размеру приложения, плюс будут отдельные apk под разные платформы (armv7, x86)