Android WebRTC дает сбой во время второго запуска WebRTC Activity

Я рекомендую избегать std::wstring в Windows или в другом месте, за исключением случаев, когда это требуется интерфейсом, или где-нибудь рядом с вызовами Windows API и соответствующими преобразованиями кодировки в качестве синтаксического сахара.

Мой взгляд обобщен в http://utf8everywhere.org , из которых я являюсь соавтором.

Если ваше приложение не ориентировано на API, например. в основном приложение UI, рекомендуется хранить строки Unicode в std :: string и кодироваться в UTF-8, выполняя преобразование около вызовов API. Преимущества, изложенные в статье, перевешивают явное раздражение конверсии, особенно в сложных приложениях. Это вдвойне подходит для многоплатформенной и библиотечной разработки.

И теперь, отвечая на ваши вопросы:

  1. Несколько слабых причин. Он существует по историческим причинам, где считается, что широкополосные каналы являются надлежащим способом поддержки Unicode. Теперь он используется для интерфейса API, которые предпочитают строки UTF-16. Я использую их только в непосредственной близости от таких вызовов API.
  2. Это не имеет никакого отношения к std :: string. Он может содержать любую кодировку, которую вы вкладываете в нее. Вопрос только в том, как вы относитесь к его содержанию. Моя рекомендация - UTF-8, поэтому он сможет корректно хранить все символы юникода. Это обычная практика в Linux, но я думаю, что Windows также должны это делать.
  3. Нет.
  4. Широкий символ - запутанное имя. В первые дни Unicode существовало убеждение, что символ может быть закодирован в два байта, отсюда и название. Сегодня это означает «любая часть персонажа, длина которой составляет два байта». UTF-16 рассматривается как последовательность таких пар байтов (aka Wide characters). Символ в UTF-16 принимает одну или две пары.

0
задан Lee Boon Kong 17 January 2019 в 09:33
поделиться

1 ответ

Хорошо, я нашел проблему для этого.

У меня есть класс Client, который действует как оболочка для моих соединений Socket.IO. Давайте назовем это ClientClass. В ClientClass у меня есть частный статический экземпляр ClientClass, доступ к которому возможен только через вызов статического метода getInstance () класса.

Во время закрытия соединения я забыл установить его в null как так:

  public void close() {
    socket.emit("bye");
    socket.off();
    socket.disconnect();
    socket.close();
    roomName = null;
    socket = null;
    instance = null; //I forgot this line
}

Это довольно странная проблема, которую сложно отладить по ошибкам, которую невозможно отследить, просто прочитав журналы ошибок.

0
ответ дан Lee Boon Kong 17 January 2019 в 09:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: