此AsyncTask类应该是静态的,否则可能发生泄漏(匿名Android.os.AsyncTask)
该警告是由于内部类持有对外部类的隐式引用,因此阻止外部类进行GC。解决方案在于警告本身,即该类应该声明为静态的。
但是,解决方案是java特有的。鉴于kotlin没有静态
修饰符,最接近的是companion object,而companion object确实包含对它的“外部类”的引用。
class MyActivity : AppCompatActivity(), MyListener {
companion object {
class Attempt3Task(val callback: MyListener) : AsyncTask<Unit, Unit, Unit>() {
override fun doInBackground(vararg params: Unit?) {
TODO("")
}
override fun onPostExecute(result: Unit?) {
callback.updateUi()
}
}
}
inner class Attempt2Task : AsyncTask<Unit, Unit, Unit> () {
override fun doInBackground(vararg params: Unit?) {
TODO("
}
}
// Gives warning "This AsyncTask class should be static or leaks might occur"
val attempt_1 = object: AsyncTask<Unit, Unit, Unit>() {
override fun doInBackground(vararg params: Unit?) {
TODO("")
}
}
// Does not give warning but, as far as I can tell, is conceptually same as attempt_1
val attempt_2 = Attempt2Task()
// Does not give warning but companion object does have reference to the activity, no?
val attempt_3 = Attempt3Task(this)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
}
这是我的代码: 我怎么纠正这个?
我的项目中有一个AsyncTask,有一个警告,它说:
我正在开发一个带有服务的Android 2.3.3应用程序。我在服务中有以下内容与主要活动进行通信: 在这里,,我得到以下Lint警告:
问题内容: Android示例中的“登录”实现为非静态内部类。但是,根据Commonsguys的观点,此类应该是静态的,并且使用对外部活动的弱引用参见this。 那么正确的实现方式是什么?静态还是非静态? Commonsguy实现 https://github.com/commonsguy/cw- android/tree/master/Rotation/RotationAsync/ 从Googl
问题内容: 假设我有一个要实例化的类。我在类中有几个私有的“帮助器”方法,它们不需要访问任何类成员,而仅对它们的参数进行操作,并返回结果。 有没有指定任何特别的原因,并为静态方法-或任何特别的理由不? 将它们设置为非静态无疑是最容易的,即使它们可以肯定是静态的而不会引起任何问题。 问题答案: 我更喜欢这样的帮助方法; 这将使读者清楚地知道他们不会修改对象的状态。我的IDE还将以斜体显示对静态方