像这样定义“ onclicklistener”是否会由于引用当前活动而导致内存泄漏? (即currentActivity.this
提及是否创建了对当前活动的强引用,从而防止了对其进行垃圾回收?)
public class currentActivity extends Activity {
@Override
public void onCreate() {
// setup
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(currentActivity.this, newActivity.class);
startActivity(intent);
}
});
}
}
答案 0 :(得分:0)
应该很好,因为活动拥有按钮,而按钮拥有点击侦听器,如果活动被破坏,它将依次杀死按钮及其点击侦听器。
例如,如果您将活动传递给单例对象并将其保留为引用,则可能会导致内存泄漏。
object SomeObject {
var activity: AppCompatActivity? = null
}
public class currentActivity extends Activity {
@Override
public void onCreate() {
// setup
myButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SomeObject.activity = this
Intent intent = new Intent(currentActivity.this, newActivity.class);
startActivity(intent);
}
});
}
}
在活动被破坏时,Singleton将保留对即将被破坏并导致泄漏的活动的引用。
答案 1 :(得分:0)
来自this article的 Java中的内存泄漏是指某些对象不再被应用程序使用,但是GC(垃圾收集器)无法将其识别为未使用的情况
View
或Activity
或Application
静态或通过它们会妨碍其正常生命周期或类似寿命的方式通过,被认为是内存泄漏在您的情况下,如果您的活动被破坏,则回调很容易被垃圾回收,因为它们的范围在该活动之内