1

我正在编写一个媒体播放应用程序。它工作正常,但播放约 30 分钟后播放停止,据我所知,它只发生在我外出跑步时。我不认为(但我不确定)当我连接到调试器时会发生这种情况,但是由于发生错误需要很长时间,所以调试起来很烦人。

即使 MediaPlayer 在它自己的(绑定的)服务中运行,我感觉这个错误可能与 android 在屏幕关闭一段时间后暂停/停止我的应用程序有关(这在我调试时不会发生)。然而,这只是一个猜测。

我的问题不是确切的问题是什么,而是如何调试这类问题。我已将 BugSense 附加到我的应用程序中,但它不会引发任何异常。任何关于实用调试策略的想法?

编辑:该服务可以在这里找到:https ://github.com/bottiger/SoundWaves/blob/5820196924ce9bc731f50c5def991351ed9b3a3b/src/info/bottiger/podcast/service/PlayerService.java

我正在使用以下代码来绑定它。

public ServiceConnection playerServiceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName className, IBinder service) {
        mPlayerServiceBinder = ((PlayerService.PlayerBinder) service)
                .getService();
        // log.debug("onServiceConnected");
    }

    @Override
    public void onServiceDisconnected(ComponentName className) {
        mPlayerServiceBinder = null;
        // log.debug("onServiceDisconnected");
    }
};

并在 onCreate()

       getActivity().bindService(bindIntent, playerServiceConnection,
            Context.BIND_AUTO_CREATE);
4

1 回答 1

2

您不调用 startForeground 和 stopForeground。

启动的服务可以使用 startForeground(int, Notification) API 将服务置于前台状态,系统认为它是用户主动意识到的,因此在内存不足时不适合杀死。(理论上,在当前前台应用程序的极端内存压力下,服务仍然可能被杀死,但实际上这不应该是一个问题。)

当系统需要更多资源时,Android 会终止您的服务。这种情况很难调试。这是操作系统特定的行为。

在你的服务中调用 startForeground,当你开始播放和 stopForeground 时停止。

有关服务生命周期的更多信息,您可以在此处阅读:http: //developer.android.com/reference/android/app/Service.html

于 2013-02-15T09:32:54.943 回答