В моем приложении мне нужно использовать определенный вид (WebView) для использования кода javascript в фоновом режиме. Это означает, что веб-просмотр должен быть вне экрана. Первоначально я создал это представление внутри потока пользовательского интерфейса, используя runOnUiThread, но я заметил, что когда я делаю некоторую операцию в пользовательском интерфейсе (коснитесь экрана для перемещения какого-либо объекта), мой фоновый вид, похоже, замедляется и не является «resposnive» по мере необходимости. Отсюда идея «выполнить» это представление во вторичном потоке, чтобы сделать его независимым. Я не знаю, возможно ли это в любом случае. Я начал делать этот код:Android: создание и управление представлением внутри вторичного потока
class WebViewThread extends Thread
{
public WebView MyWebView = null;
public void run()
{
Looper.prepare();
MyWebView = new WebView(MainActivityContext);
Looper.loop();
}
}
Проблема заключается в том, если я пытаюсь «взаимодействовать» с точкой зрения вызывающего некоторый методом из UI нити я получил сообщение об ошибке во время выполнения, говоря мне, что взгляд может сострадать только одной и ту же тему которые его создают. К сожалению, этот поток «заперт» в цикле, и я понятия не имею, как «вводить» взаимодействующий код внутри этого потока.
Теперь вопрос: моя идея создания и управления представлением внутри вторичного потока может быть выполнена или это действительно плохая идея, которая не может работать?
Привет, это может быть решение, но как получить данные обратно? – Suppaman
Создайте метод 'processData (String data)' или что-то еще в вашем классе encompassing и вызовите этот метод из вашего потока, когда вы закончите. Не забудьте обернуть его в 'runOnUiThread', если вы хотите, чтобы он переместился в основной поток. –
Просто протестировано, но, к сожалению, ваше решение, похоже, не работает. Сообщение об ошибке исключения одно и то же: «Только исходный поток, создавший иерархию представлений, может коснуться его представлений». :-( – Suppaman