Android 在这种情况下,活动泄漏中定义的处理程序是否会泄漏
我有一个定义了处理程序的活动:Android 在这种情况下,活动泄漏中定义的处理程序是否会泄漏,android,Android,我有一个定义了处理程序的活动: final Handler updateHandler = new Handler() { public void handleMessage(Message msg) { // Do stuff. } }; 在我的onCreate方法中,如果我将此处理程序分配给活动外部的静态列表,它是否会泄漏(或者,外部列表是否会永远保留对我的活动的引用)?即: @覆盖 创建时的公共void(Bundle savedInstanceState){
final Handler updateHandler = new Handler() {
public void handleMessage(Message msg) {
// Do stuff.
}
};
在我的onCreate
方法中,如果我将此处理程序分配给活动外部的静态列表,它是否会泄漏(或者,外部列表是否会永远保留对我的活动的引用)?即:
@覆盖
创建时的公共void(Bundle savedInstanceState){
addHandler(updateHandler);
}
...
公共类{
静态列表处理程序=新的ArrayList();
公共静态void addHandler(处理程序处理程序){
添加(handler);
}
}
在我的onCreate方法中,如果我将这个处理程序分配给我的活动之外的一个静态列表,它是否会泄漏(或者说,这个外部列表是否会永远保留对我的活动的引用)
对。不要将
处理程序
放在静态数据成员中。是否有替代方法,例如当视图被“释放”或操作系统不再使用时调用的事件?如果是这样的话,我可以注销处理程序,是吗?@Chu:“有没有其他方法,比如当视图被“释放”或不再被操作系统使用时调用的事件?”——IMHO,无论您认为要解决的问题是什么,都应该以其他方式解决,而不是将处理程序放在静态数据成员中。由于您没有费心解释通过这个静态的处理程序列表
您试图实现的目标,因此我或其他任何人都不可能给您建议您真正应该在这里做什么。好的,我开始了一个新问题,以解决完全相同的问题:
@Override
public void onCreate(Bundle savedInstanceState) {
SomeStaticClass.addHandler(updateHandler);
}
...
public class SomeStaticClass {
static List<Handler> handlers = new ArrayList<Handler>();
public static void addHandler(Handler handler) {
handlers.add(handler);
}
}