如何为MediaPlayer声明全局变量?

时间:2017-11-04 13:50:43

标签: android kotlin

override fun onCreate(savedInstanceState: Bundle?) {
...
  val mpOkay = MediaPlayer.create (this, R.raw.inordnung)
...
}

有效但

val mpOkay = null
override fun onCreate(savedInstanceState: Bundle?) {
...
  mpOkay = MediaPlayer.create (this, R.raw.inordnung)
...
}

var mpOkay
override fun onCreate(savedInstanceState: Bundle?) {
...
  mpOkay = MediaPlayer.create (this, R.raw.inordnung)
...
}

kotlin是否希望我一遍又一遍地创建一个新的Mediaplayer并浪费内存?

3 个答案:

答案 0 :(得分:1)

您必须声明变量的类型才能为其分配MediaPlayer,例如:

var mpOkay: MediaPlayer? = null

在声明中

var mpOkay = null

mpOkay将其类型推断为Nothing?,这意味着您无法将null以外的任何值分配给它。

宣言

var mpOkay

根本不是有效的语法,因为此属性没有声明或可推断类型。

答案 1 :(得分:1)

正好适用于像onCreate这样的情况, 会在访问变量之前将变量初始化为非空值,但出于某种原因无法在构造函数,Kotlin已经

lateinit var mpOkay: MediaPlayer

答案 2 :(得分:0)

除了其他答案,你可以使用"懒惰"设置val属性(不需要测试null,!!?即可使用。

val mp: MediaPlayer by lazy { MediaPlayer.create(context, resId)  }

首次访问MediaPlay.create()时,这只会运行一次mp。在访问context之前,请确保mp有效。