草庐IT

Android MediaPlayer 卡在 prepare() 中

coder 2023-12-03 原文

我遇到了一个严重的问题,媒体播放器 (MP) 卡在 prepare() 方法中。 我的应用程序在 AsyncTask 中运行 prepare() 以避免阻塞 UI,因为源来自网络。有几个用户可以随时单击的“播放”按钮,因此我在同步方法中添加了 prepare() 以更好地控制 MP 的状态。我的应用程序还调用 release() onPause 来释放已使用的资源。

事情是,我注意到如果在准备时调用 release()prepare() 永远不会返回,所以我被困在同步方法中。最糟糕的是 AsyncTask 线程处于死锁状态,每次用户在该状态下单击播放时都会浪费另一个线程,因为它一直在等待获取拥有的监视器永不返回的 prepare()。很快我所有的 AsyncTasks 线程都被浪费了,由于我大量使用它们,我的应用程序停止工作。

所以我的问题是:有人知道如何克服这个问题吗?我正在认真考虑使用 MediaPlayer 重做我的所有工作,但我需要事先知道处理此类情况的最佳方法。

最佳答案

您应该改用 prepareAsync()。而且您不需要 AsyncTask 只是为了 MediaPlayer 准备。

关于Android MediaPlayer 卡在 prepare() 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8511210/

有关Android MediaPlayer 卡在 prepare() 中的更多相关文章

  1. ruby-on-rails - 当我运行 `bundle exec rake test:prepare` 时它出错了,但是 `bundle exec rake db:test:prepare` 运行正常但有警告。这是怎么回事? - 2

    所以根据thislink一个是快捷方式包装器(所以我猜它们是一样的)。当我运行bundleexecrakedb:test:prepare时,我得到了这个错误:Don'tknowhowtobuildtask'test:prepare'/Users/aj/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/ruby_executable_hooks:15:in`eval'/Users/aj/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/ruby_executable_hoo

  2. ruby-on-rails - 什么是 rake db :test:prepare actually do? - 2

    我正在观看Rails教程视频,但我无法弄清楚db:test:prepare命令的实际作用。有人可以提供解释吗? 最佳答案 Therakedb:migrateaboverunsanypendingmigrationsonthedevelopmentenvironmentandupdatesdb/schema.rb.Therakedb:test:loadrecreatesthetestdatabasefromthecurrentdb/schema.rb.Onsubsequentattempts,itisagoodideatofirstr

  3. javascript - 使用哈希 url 卡在 Angular ui-router State.go 上? - 2

    我正在研究ui-router。我有一个状态:.state('new-personal-orders',{url:'/orders/new-personal-orders/:catId?',template:''})在我的Controller中,我可以使用$state.go('new-personal-orders',null,{reload:true})在Html文件中我有一个anchor标记:Link如果标签被点击,状态就会改变,'new-personal-orders'变成当前状态,在url中有尾随散列。然后url看起来像:http://localhost:3000/orders/

  4. javascript - 使用 Promises 时卡在变量上的最佳实践 - 2

    这个问题在这里已经有了答案:HowdoIaccesspreviouspromiseresultsina.then()chain?(17个答案)关闭7年前。我是Promises的新手,我想知道在链中向下移动时保持变量的最佳实践是什么?通过Promise连接到MongoDB非常简单:connectToMongoDB(data).done(function(db){varcollection=db.collection('test_inserts');//domorestuffhere});但是如果我必须连接到两个不同的数据库会怎样呢?connectToMongoDB1(data1).the

  5. javascript - 谷歌授权弹出窗口卡在 chrome 扩展中 - 2

    我正在使用gapi客户端在chrome扩展中访问GoogleDrive。第一步是授权我的应用程序。我正在使用gapi.auth.authorize来启动授权。在我通过gapi启动的弹出窗口授权应用程序后,窗口永远不会关闭并卡住,如下图所示。但是在后台授权成功了,因为如果我手动关闭窗口,下次我就看不到卡住的弹出窗口了。有人可以指出我做错了什么吗?在授权弹出窗口中点击“允许访问”后,然后显示卡住的空白弹出窗口我正在使用的代码functionhandleClientLoad(){gapi.client.setApiKey('MyAPIkey');window.setTimeout(check

  6. javascript - 附加到卸载事件时,sendBeacon 请求卡在 "(pending)" - 2

    当我直接在控制台中调用navigator.sendBeacon时,我立即在Chrome开发工具网络Pane中看到请求已成功完成。当我使用类似下面的代码将sendBeacon附加到beforeunload事件,然后离开页面时,我看到网络Pane中添加了一行,但其状态停留在“(待定)”并且从未发送。我做错了什么?window.addEventListener('beforeunload',function(){navigator.sendBeacon('https://www.example.com/sendBeacon-data-collector','Sentbyabeacon!');

  7. javascript - Node.js Express 静态服务器卡在图像上 - 仅限 Chrome - 2

    这是一个非常奇怪的错误,困扰了我很长时间。我有一个使用ExpressStatic中间件以及呈现Jade的单独路由的基本网站。这是我的配置app.set('views',__dirname+'/views');app.set('viewengine','jade');app.use(stylus.middleware({src:__dirname+'/public',dest:__dirname+'/public',compile:function(str,path){returnstylus(str).set('filename',path).set('compress',true).

  8. javascript - 单击后悬停状态卡在按钮上 - 2

    我有一个具有两种状态的表单:编辑和可见。当您单击一个图标来编辑表单时,底部的两个按钮(类似于提交)会出现以保存或取消。当我单击它们时,表单会更新(或取消)并且按钮会消失。问题是当我重新打开表单进行编辑(并且按钮再次可见)时,最后一次单击仍然在Chrome中应用了悬停状态。SaveCancel为简单起见,这里只是取消函数...$scope.cancel=function(){//setaflagforangulartohide/showeditingmodeinHTML$scope.editMode=false;}; 最佳答案 如之前

  9. javascript - React、Redux、React-Router - 卡在安装 material-ui 时 - 2

    教程:但是由于我使用的是redux和react路由器,所以我无法真正将MuiThemeProvider放在链的顶部。包含此库的最佳方式是什么?这是我的ReactDOM.render函数:ReactDOM.render({devTools},document.getElementById('root'));这就是路由器:exportdefault(onLogout)=>(); 最佳答案 我是这样做的。我有一个index.js,我的package.json将其作为要启动的主文件(使用npmstart)。我在其中(为简洁起见删除了一些导入

  10. javascript - Chrome 53 中的 `Allocation stack` 选项卡在哪里 - 2

    我正在阅读thisarticle关于内存分析。其中一个屏幕截图显示了Allocationstack选项卡:在我的53版Chrome中没有这样的标签:它去哪儿了?如何在Chrome53中找到Allocationstack中显示的信息? 最佳答案 要使用此功能,您需要转到DevTools->Settings并启用Recordheapallocationstacktraces。 关于javascript-Chrome53中的`Allocationstack`选项卡在哪里,我们在StackOve

随机推荐