Эта ошибка не является серьезной проблемой, поскольку приложение по-прежнему работает должным образом. Мне просто любопытно. Приложение запускает фоновый цикл, который вызывает задержку(1000), а затем в потоке пользовательского интерфейса рисует SurfaceView. В этом случае, когда я нажимаю кнопку «Домой», моя поверхность разрушается, и я получаю следующую ошибку:
2024-11-09 18:55:20.898 22258-22258 BufferQueueProducer com.example.test E [SurfaceView[com.example.test/com.example.test.MainActivity]#1(BLAST Consumer)1](id:56f200000001,api:0,p:-1,c:22258) disconnect: not connected (req=2)
Если я закомментирую задержку, моя поверхность не будет разрушена, и я не получу ошибку.
Что такое причина ошибки и как ее избежать?
Спасибо за помощь.
Это минимальная воспроизводственная деятельность:
package com.example.test
import android.os.Bundle
import android.util.Log
import android.view.SurfaceHolder
import android.view.SurfaceHolder.Callback
import android.view.SurfaceView
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.ui.viewinterop.AndroidView
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import java.util.concurrent.Executors
class MainActivity : ComponentActivity() {
lateinit var surfaceView: SurfaceView
var isAppRunning = false
var hasSurface = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
surfaceView = SurfaceView(this)
surfaceView.holder.addCallback(object : Callback {
override fun surfaceCreated(p0: SurfaceHolder) {
Log.d("tag", "On surface created")
hasSurface = true
runApp()
}
override fun surfaceChanged(p0: SurfaceHolder, p1: Int, p2: Int, p3: Int) {
}
override fun surfaceDestroyed(p0: SurfaceHolder) {
Log.d("tag", "On surface destroyed")
hasSurface = false
}
})
setContent {
AndroidView(factory = { context ->
surfaceView
})
}
}
override fun onPause() {
super.onPause()
isAppRunning = false
}
fun runApp() {
isAppRunning = true
val executor = Executors.newSingleThreadExecutor()
executor.execute {
while (isAppRunning) {
runBlocking {
launch {
// if delay is commented out, there is no error
delay(1000)
}
}
runOnUiThread {
if (hasSurface) {
val canvas = surfaceView.holder.lockCanvas()
canvas?.let {
surfaceView.holder.unlockCanvasAndPost(canvas)
}
}
}
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... cted-req-2
Ошибка Android Kotlin SurfaceView: отключение: не подключено (req = 2) ⇐ Android
Форум для тех, кто программирует под Android
1731262295
Anonymous
Эта ошибка не является серьезной проблемой, поскольку приложение по-прежнему работает должным образом. Мне просто любопытно. Приложение запускает фоновый цикл, который вызывает задержку(1000), а затем в потоке пользовательского интерфейса рисует SurfaceView. В этом случае, когда я нажимаю кнопку «Домой», моя поверхность разрушается, и я получаю следующую ошибку:
2024-11-09 18:55:20.898 22258-22258 BufferQueueProducer com.example.test E [SurfaceView[com.example.test/com.example.test.MainActivity]#1(BLAST Consumer)1](id:56f200000001,api:0,p:-1,c:22258) disconnect: not connected (req=2)
Если я закомментирую задержку, моя поверхность не будет разрушена, и я не получу ошибку.
Что такое причина ошибки и как ее избежать?
Спасибо за помощь.
Это минимальная воспроизводственная деятельность:
package com.example.test
import android.os.Bundle
import android.util.Log
import android.view.SurfaceHolder
import android.view.SurfaceHolder.Callback
import android.view.SurfaceView
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.ui.viewinterop.AndroidView
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import java.util.concurrent.Executors
class MainActivity : ComponentActivity() {
lateinit var surfaceView: SurfaceView
var isAppRunning = false
var hasSurface = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
surfaceView = SurfaceView(this)
surfaceView.holder.addCallback(object : Callback {
override fun surfaceCreated(p0: SurfaceHolder) {
Log.d("tag", "On surface created")
hasSurface = true
runApp()
}
override fun surfaceChanged(p0: SurfaceHolder, p1: Int, p2: Int, p3: Int) {
}
override fun surfaceDestroyed(p0: SurfaceHolder) {
Log.d("tag", "On surface destroyed")
hasSurface = false
}
})
setContent {
AndroidView(factory = { context ->
surfaceView
})
}
}
override fun onPause() {
super.onPause()
isAppRunning = false
}
fun runApp() {
isAppRunning = true
val executor = Executors.newSingleThreadExecutor()
executor.execute {
while (isAppRunning) {
runBlocking {
launch {
// if delay is commented out, there is no error
delay(1000)
}
}
runOnUiThread {
if (hasSurface) {
val canvas = surfaceView.holder.lockCanvas()
canvas?.let {
surfaceView.holder.unlockCanvasAndPost(canvas)
}
}
}
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79173409/android-kotlin-surfaceview-error-disconnect-not-connected-req-2[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия