我今天一直在谷歌搜索,我找不到一个能回答我问题的简单解决方案。我有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警告突然出现..我似乎无法找到一个简单的解决方案来摆脱它。谢谢。
答案 0 :(得分:0)
您需要使用引用来调用方法,而不是隐式封闭类。试试activity.startUploadPhoto();