【发布时间】:2012-12-24 08:47:57
【问题描述】:
我这天一直在谷歌搜索,但找不到一个简单的解决方案来回答我的问题。我有 Lint 警告“这个 Handler 类应该是静态的,否则可能会发生泄漏”所以我遵循 Romain Guy 和许多其他人提出的逻辑,并按如下方式构建了我的 Handler..
public static class MyHandler extends Handler {
private final WeakReference<CustomTrophyCreateActivity> mActivity;
MyHandler(CustomTrophyCreateActivity activity) {
mActivity = new WeakReference<CustomTrophyCreateActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
if (mActivity != null) {
Activity activity = mActivity.get();
if (activity != null) {
// Call non static method in enclosing activity.. CANT DO THIS
startUploadPhoto();
}
}
}
所以基本问题是.. 我如何从已设为静态的 Handler 中调用此非静态方法以避免内存泄漏??
我真的很想避免将 startUploadPhoto() 设为静态,因为 1) 不需要,2) 更改变量需要做大量工作。我完全理解为什么会弹出这个 lint 警告。我似乎无法找到一个简单的解决方案来摆脱它。谢谢你。
【问题讨论】:
-
你的活动就在那里,不是吗?
-
是的,活动是封闭类。我不知道你要去哪里。
-
你不能只做
activity.startUploadPhoto();吗? (如果输入正确) -
啊,看看我的错误..我试过了,但皮棉标记仍然存在..我没有意识到皮棉标记改变了..它需要从活动转换为 CustomTrophyCreateActivity..我想在进行更改后将鼠标悬停在 lint 标记上可以节省时间(比如几个小时):(
-
嗯.. 事情很奇怪.. 请看我编辑的问题。感谢您的宝贵时间。
标签: android