我正在写一个媒体播放应用。它工作正常,但播放约30分钟后播放停止,据我所知,它只发生在我出去跑步时。我不认为(但我不确定)当我连接到调试器时会发生这种情况,但由于发生错误需要很长时间,所以调试非常烦人。
即使MediaPlayer正在运行它自己的(绑定)服务,我也觉得这个bug可能与android在屏幕关闭一段时间之后暂停/停止我的应用程序有关(当我没有这种情况时就不会发生这种情况调试)。但这只是猜测。
我的问题不是确切的问题,而是如何调试这类问题。我已将BugSense附加到我的应用程序,但它不会引发任何异常。有没有想过实用的调试策略?
我正在使用以下代码绑定它。
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);
答案 0 :(得分:1)
您不会调用startForeground和stopForeground。
已启动的服务可以使用startForeground(int,Notification)API将服务置于前台状态,系统认为该服务是用户主动了解的内容,因此在内存不足时不会成为查杀的候选者。 (从理论上讲,服务在当前前台应用程序的极端内存压力下被杀死仍然是可能的,但实际上这不应该是一个问题。)
当系统需要更多资源时,Android会终止您的服务。这种情况很难调试。这是特定于操作系统的行为。
当您开始播放时,在您的服务中调用startForeground,在停止时调用stopForeground。
有关服务生命周期的更多信息,请参阅此处:http://developer.android.com/reference/android/app/Service.html