dequeueBuffer failed (Device or resource busy)

本文探讨了安卓系统中4.4和4.4.2版本遇到的bug,包括设备或资源忙碌导致的缓冲区解队失败和锁屏失败等问题,并提供了在应用中禁用硬件加速的解决方法,尽管这会引发应用的其他异常行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

05-17 13:58:44.649: E/Surface(1360): dequeueBuffer failed (Device or resource busy)
05-17 13:58:44.649: E/ViewRootImpl(1360): Could not lock surface
05-17 13:58:44.649: E/ViewRootImpl(1360): java.lang.IllegalArgumentException
05-17 13:58:44.649: E/ViewRootImpl(1360): at android.view.Surface.nativeLockCanvas(Native Method)
05-17 13:58:44.649: E/ViewRootImpl(1360): at android.view.Surface.lockCanvas(Surface.java:243)
05-17 13:58:44.649: E/ViewRootImpl(1360): at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2479)
05-17 13:58:44.649: E/ViewRootImpl(1360): at android.view.ViewRootImpl.draw(ViewRootImpl.java:2453)
05-17 13:58:44.649: E/ViewRootImpl(1360): at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2297)
05-17 13:58:44.649: E/ViewRootImpl(1360): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1927)
05-17 13:58:44.649: E/ViewRootImpl(1360): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1044)
05-17 13:58:44.649: E/ViewRootImpl(1360): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5714)
05-17 13:58:44.649: E/ViewRootImpl(1360): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
05-17 13:58:44.649: E/ViewRootImpl(1360): at android.view.Choreographer.doCallbacks(Choreographer.java:574)
05-17 13:58:44.649: E/ViewRootImpl(1360): at android.view.Choreographer.doFrame(Choreographer.java:544)
05-17 13:58:44.649: E/ViewRootImpl(1360): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
05-17 13:58:44.649: E/ViewRootImpl(1360): at android.os.Handler.handleCallback(Handler.java:733)
05-17 13:58:44.649: E/ViewRootImpl(1360): at android.os.Handler.dispatchMessage(Handler.java:95)
05-17 13:58:44.649: E/ViewRootImpl(1360): at android.os.Looper.loop(Looper.java:136)
05-17 13:58:44.649: E/ViewRootImpl(1360): at android.app.ActivityThread.main(ActivityThread.java:5017)
05-17 13:58:44.649: E/ViewRootImpl(1360): at java.lang.reflect.Method.invokeNative(Native Method)
05-17 13:58:44.649: E/ViewRootImpl(1360): at java.lang.reflect.Method.invoke(Method.java:515)
05-17 13:58:44.649: E/ViewRootImpl(1360): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
05-17 13:58:44.649: E/ViewRootImpl(1360): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)

05-17 13:58:44.649: E/ViewRootImpl(1360): at dalvik.system.NativeStart.main(Native Method)


 安卓系统级别的bug ,在4.4 和 4.4.2中,其中的一个解决方案:

 

android:hardwareAccelerated="false"
in the Manifest fixes the crash. Nevertheless this causes other strange behaviours in my App.


这个,别人那里复制过来的,正在测试。。。。。。

### 解决 `mount failed` 和 `device or resource busy` 错误的方法 当遇到 Linux 报错 `"device or resource busy"` 时,通常是因为目标文件系统正在被其他进程占用或者存在未释放的锁机制。以下是针对该问题的具体分析和解决方法: #### 原因分析 此错误可能由以下几种情况引起: 1. 文件系统已经被挂载到另一个位置。 2. 存在某些进程正访问已挂载的目标目录或设备。 3. 使用了不兼容的选项尝试重新挂载同一设备。 上述原因已在参考资料中提及[^1]。 --- #### 方法一:检查是否有重复挂载 可以运行命令来确认是否存在重复挂载的情况: ```bash cat /proc/mounts | grep <your_mount_point> ``` 如果发现多个条目指向同一个挂载点,则说明确实发生了重复挂载。此时应先卸载其中一个实例再重试新挂载操作。 --- #### 方法二:强制解除现有连接 对于通过 SSHFS 实现远程文件系统的场景下,若常规方式无法完成卸载并提示资源繁忙的话,可采用如下指令强行断开关联[^2]: ```bash fusermount -zu /path/to/mountpoint ``` 另外一种可行的选择是利用懒惰模式卸载(`lazy`)参数实现异步清理过程而不阻塞当前线程继续工作下去: ```bash sudo umount -l /path/to/mountpoint ``` 这两种手段均能有效规避由于后台仍有活动链接所引发的问题。 --- #### 方法三:终止占用进程 有时即使执行以上措施仍会遭遇相同状况,这可能是还有些隐藏的应用程序持续读写数据所致。为此我们需要找出具体哪些PID影响到了我们的动作,并手动结束它们的服务流程: 查询涉及指定路径的所有进程编号: ```bash lsof +D /target/directory/ ``` 接着杀死那些不必要的任务(需谨慎处理以免造成意外后果): ```bash kill -9 PID_NUMBER ``` 之后再次尝试正常的卸除步骤即可恢复正常状态. --- ### 总结 综上所述,面对“Device Or Resource Busy”的情形可以从三个方面入手解决问题——排查多重绑定关系;借助特殊工具实施即时分离策略;以及清除干扰源即关闭相关联的工作单元。每种途径都有其适用范围,在实际应用过程中可根据具体情况灵活选用最合适的方案加以应对。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值