【问题标题】:onDestroy services crashing and restarting phoneonDestroy 服务崩溃并重启手机
【发布时间】:2014-01-01 00:14:57
【问题描述】:

我已经实现了一个播放器服务,我在播放音乐时关闭应用程序,然后在调用 onDestroy 服务时应用程序崩溃并且手机重新启动。 我该如何解决这个问题?

@Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        if (!PlayerServices.mp.isPlaying()) {
            stopService(playerService);
            cancelNotification();
        }
    }

谢谢

【问题讨论】:

  • 你得到了什么日志。先关闭静态方法看看播放器播放的歌曲是否错误
  • in avd 没有显示任何错误,因为这个应用程序读取了外部存储,所以我在我的手机中安装了这个应用程序
  • 所以? LogCat 是怎么说的?

标签: android restart ondestroy


【解决方案1】:

把你的代码顺序改成:

@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    if (!PlayerServices.mp.isPlaying()) {
        stopService(playerService);
        cancelNotification();
    }
    super.onDestroy();
}

最后调用 super.onDestroy()。

【讨论】:

  • 我最后尝试了放置 super.onDestroy(),但应用仍然崩溃并重新启动
  • 如果没有更多信息,很难判断发生了什么。也许您可以从 logcat 中显示您的日志。
  • 当然是的,但是这个应用程序读取存储..我不知道从驱动器读取。好的。我会尝试找出问题所在。谢谢大家:)
【解决方案2】:

你不应该为任何事情调用 super.onDestroy()。在这种特殊情况下,您正在破坏服务,然后试图停止它,这是没有意义的。您还应该查看您的 logCat 输出,让自己确信这是真的。

一般来说,如果生命周期方法希望您调用要子类化的基类的方法,javadoc 会这样说。例如,看看 Activity.onPause()。

【讨论】:

  • 永远不要打电话给super.onDestroy() 是非常错误的建议,小心编辑它以解释您的实际意思?
  • 我不知道其他人在播放音乐时如何破坏主屏幕中的应用程序
  • super.onDestroy() 不是必需的,并且可能会调用奇怪的结果。如果您正在响应 onDestroy() 中的系统回调,请完成您的工作。这就是你需要做的。系统会为您销毁您的组件。
  • 我不确定您所说的在播放音乐时破坏主屏幕中的应用程序是指谁。如果用户停止了您的音乐,而您想停止服务,请调用 stopService()。服务将停止,系统将回收其资源。如果您想处理 system 由于某种原因即将销毁您的 Service 的情况,您只需要调用 onDestroy() 即可。
  • @JoeMalin :我建议您遵循自己的建议并查看onDestroy() - developer.android.com/reference/android/app/… 的文档
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多