草庐IT

android - 调试服务崩溃

coder 2023-12-03 原文

当然,我有一个音乐服务负责在后台播放音乐,还有一些其他的事情,比如通知需要进行的 UI 更改的 Activity、存储和恢复队列、通过光标获取歌曲记录,并且每次歌曲更改时,它都会负责更新正在进行的通知中的位图。

有什么问题? 服务崩溃几乎总是在用户试图做的时候......好吧几乎所有其他事情。例如,播放歌曲,然后打开游戏会使服务崩溃,有时像在 chrome 上浏览网页这样的轻量级操作也会导致服务崩溃。

一些细节:

1 - 该服务是通过 startService(new Intent(this, MyMusicService.class)); 启动的,但是当用户离开 Activity 时,我调用 startForeground(mId , mNotification); 以显示提供简单控制的持续通知,还因为 startForeground() 适用于应优先处理的服务,因为 activityManager 杀死这些服务会造成破坏为了用户体验(如果服务被终止,音乐将停止)

2 - 我已经尝试重现崩溃,并且在不那么繁重的工作时肯定会发生这种情况,例如在 chrome 上浏览(这将在近 50% 的时间内重现崩溃),并且始终在执行诸如启动神庙逃亡 2 之类的操作时。仅供引用,如果根本不执行任何操作 - 只是在后台播放音乐并闲置,播放将不会根本停止,并且它按照预期的方式工作。

3 - 我用作测试设备的手机绝不是慢速或低内存设备,它是 Galaxy Nexus。

4 - 我试过捕获一些多头,​​有时它只是简单地说:

02-24 06:53:32.586: I/ActivityManager(387): Process com.deadpixels.light.player (pid 27720) has died.

没有任何其他消息,有时同一条消息伴随着 WINDEATH:

 02-24 06:53:32.586: W/ActivityManager(387): Scheduling restart of crashed service com.deadpixels.light.player/.service.MyMusicService in 5000ms
 02-24 06:53:32.602: W/InputDispatcher(387): channel '418d09c8    com.deadpixels.light.player/com.deadpixels.light.player.HomeActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x9
 02-24 06:53:32.602: E/InputDispatcher(387): channel '418d09c8 com.deadpixels.light.player/com.deadpixels.light.player.HomeActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
 02-24 06:53:32.602: W/InputDispatcher(387): Attempted to unregister already unregistered input channel '418d09c8 com.deadpixels.light.player/com.deadpixels.light.player.HomeActivity (server)'
 02-24 06:53:32.602: I/WindowState(387): WIN DEATH: Window{418d09c8 u0 com.deadpixels.light.player/com.deadpixels.light.player.HomeActivity}

我还注意到,几乎总是在崩溃发生时,许多其他服务“死亡”。我附上完整的日志 here .

5 - 我尝试使用 ACRA获取有关崩溃的更多信息,但即使一切似乎都已正确设置,但在崩溃后不会发送日志,或者什么也没有发生。我知道 ACRA 检测到崩溃并开始:

02-24 06:53:37.719: D/ACRA(28293): ACRA is enabled for com.deadpixels.light.player, intializing...
02-24 06:53:37.742: D/ACRA(28293): Using default Mail Report Fields
02-24 06:53:37.742: D/ACRA(28293): Looking for error files in /data/data/com.deadpixels.light.player/files
02-24 06:53:37.742: W/ACRA(28293): com.deadpixels.light.player reports will be sent by email (if accepted by user).

但没有发送任何内容,既没有发送到我设置的 mailto,也没有发送到 Google 文档中的表单。

不确定还可以尝试什么,我希望能得到一些关于寻找什么的好主意。正如我所说,该服务确实做了一些事情,据我所知,这些事情并没有那么多资源,老实说,我什至不确定它是否与崩溃的服务有关。

这是一个 gist服务中发生的几个代码位,以及我设置的 ACRA 代码。还值得注意的是,我尝试重现与其他音乐播放器崩溃的服务,但我根本没有遇到这个问题。

感谢您的帮助!

最佳答案

似乎操作系统认为您的服务在用户离开您的 Activity 后立即处于后台,尽管它是“前台”服务。

不过,我会设计您的 MyMusicService 服务:

  1. onCreate 中准备MediaPlayer
  2. 在您的服务的onStartonStartCommand 实现中,开始播放选定/适当的声音文件。如果您希望音乐在后台继续播放,即使设备处于 sleep 状态,也可以获取部分唤醒锁。返回 START_STICKY
  3. 向状态栏添加通知。 3 在 onDestroy 中,清除所有内容。

当音乐停止时,无论是通过用户交互还是歌曲结束,请务必移除通知并释放唤醒锁。

可以在这里找到一个很好的教程。 http://www.youtube.com/watch?v=mcb99u8Nlgs&list=PL14AA2548E3C96B50

在 OP 添加评论/更新“要点”后更新:

我看到您服务中的 BroadcastReceiver mReceiveronReceive 访问数据库。这可能是问题所在。将其卸载到 IntentService:在 onReceive 中,只需使用与onReceive 收到。然后 IntentService 可以完成所有实际工作,而不用担心任何可能导致进程终止的缓慢数据库访问。

如果在设备休眠时播放音乐仍然需要工作,请确保获得部分唤醒锁(并确保在必要时释放它!)。

关于android - 调试服务崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15052329/

有关android - 调试服务崩溃的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  4. Ruby Readline 在向上箭头上使控制台崩溃 - 2

    当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

  5. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  6. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  7. ruby-on-rails - 无法让 rspec、spork 和调试器正常运行 - 2

    GivenIamadumbprogrammerandIamusingrspecandIamusingsporkandIwanttodebug...mmm...let'ssaaay,aspecforPhone.那么,我应该把“require'ruby-debug'”行放在哪里,以便在phone_spec.rb的特定点停止处理?(我所要求的只是一个大而粗的箭头,即使是一个有挑战性的程序员也能看到:-3)我已经尝试了很多位置,除非我没有正确测试它们,否则会发生一些奇怪的事情:在spec_helper.rb中的以下位置:require'rubygems'require'spork'

  8. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  9. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  10. ruby - JetBrains RubyMine 3.2.4 调试器不工作 - 2

    使用Ruby1.9.2运行IDE提示说需要gemruby​​-debug-base19x并提供安装它。但是,在尝试安装它时会显示消息Failedtoinstallgems.Followinggemswerenotinstalled:C:/ProgramFiles(x86)/JetBrains/RubyMine3.2.4/rb/gems/ruby-debug-base19x-0.11.30.pre2.gem:Errorinstallingruby-debug-base19x-0.11.30.pre2.gem:The'linecache19'nativegemrequiresinstall

随机推荐