---
title: 错误处理
permalink: /docs/zh/error-exception.html
key: docs-error-exception
---

错误和异常的处理在真正落地、上线的应用中非常重要。

在 fijkplayer 中，我尽量让错误和异常处理变得简答，并且具有统一的原则和规范。

## 原则

对于 dart 中的 `Error` 和 `Exception` 的关系，我比较认同 [这一说法](https://groups.google.com/a/dartlang.org/d/msg/misc/lx9CXiV3o30/s5l_PwpHUGAJ)。

翻译过来就是:
>
`Error` 和其子类用于代码错误，如果出现了 `Error`，说明您的代码出错了，您应该修复您的代码。  
`Exception` 和其子类用于运行时的错误。你可以通过一些方法避免抛出异常，但是还有很多情况下你无法避免异常的出现。

在 fijkplayer 中，也遵循这样的理念，并且严格定制了关于错误和异常的规范。

* fijkplayer 的 api 会检查参数有效性和内部状态，如果出错立即抛出 `Error`。  
* fijkplayer 中出现的异常情况都以异步的形式出现，并且作为 `FijkValue` 的字段在值发生变化时通知订阅者。
* fijkplayer 中的播放器相关 exception 都是 `FijkException` 或其子类的实例。
* fijkplayer 中 `FijkException` 不会被抛出，所以不需要捕获。
* fijkplayer 中其他抛出的 `Exception` 会明确在 api 文档中指明。 

实际上，`FijkException` 都是对 [ijkplayer](https://github.com/bilibili/ijkplayer) 中播放器进入 `error` 状态原因的一个说明。
如果出现 `FijkException`，那么 `FijkPlayer` 肯定也进入了 `error` 状态。当 `FijkPlayer` 离开 `error` 状态时，异常也被清空。

## 处理响应

正确的使用 fijkplayer 的 api 不会抛出 `Error`。如果出现 `Error`，请检查您的代码是否出现逻辑错误。当然，也不能排除 fijkplayer 中出现 bug。  
如果出现无法解决的 api 调用抛出 `Error` 问题，请在 [github issues](https://github.com/befovy/fijkplayer/issues) 中进行提问。

在 fijkplayer 中，目前没有引入 `FijkException` 之外的任何异常。并且 `FijkException` 是不会抛出的。所以不需要异常处理函数 app 也不会因为 fijkplayer 而导致崩溃。  
但是一旦出现 `FijkException` 意味着播放器处于 `error` 状态，你应该显出错误信息，或者关闭播放器。

本节完，就是这么简单。😄
