在我的项目中,由于超出 VM 预算,它不断崩溃。我使用的图片都非常小,但据说它们会一直填满虚拟机。我正在处理 eclipse 并注意到它给了我以下错误的 2 个实例。
这个 Handler 类应该是静态的,否则可能会发生泄漏 (com.quickreaction.BT_screen_menuButtons.2) BT_screen_menuButtons.java/BT_activity_root/src/com/quickreaction line 1091 Android Lint 问题
当我点击这两个链接时,这也是它带给我的源代码。
Handler downloadScreenDataHandler = new Handler(){
@Override public void handleMessage(Message msg){
if(JSONData.length() < 1){
hideProgress();
showAlert(getString(R.string.errorTitle), getString(R.string.errorDownloadingData));
}else{
parseScreenData(JSONData);
}
}
};
还有..
private Handler buttonImageHandler = new Handler() {
public void handleMessage(Message msg){
//BT_debugger.showIt(activityName + ":buttonImageHandler setting background image for button.");
//msg.what will equal the index of the button images array...
//set the drawable...
Drawable d;
//we may need to round the image...
if(buttonCornerRadius > 0){
d = buttonImages.get(msg.what);
//we have a drawable, our rounding method needs a bitmap...
Bitmap b = ((BitmapDrawable)d).getBitmap();
b = BT_viewUtilities.getRoundedImage(b, buttonCornerRadius);
//convert it back to a drawable...
d = new BitmapDrawable(b);
}else{
d = buttonImages.get(msg.what);
}
buttonSquares.get(msg.what).setBackgroundDrawable(d);
buttonSquares.get(msg.what).invalidate();
} };
我一直在阅读关于使处理程序静态或弱的堆栈溢出但不知道如何。任何想法
最佳答案
这些关于使 Handler
weak
或 static
的 lint 消息通常可以被忽略。如果您正在创建一个 Handler
并在您的 Activity 中存储对它的引用,那么当您的 Activity 被销毁时,Handler
也会消失。这里没有泄漏。唯一可能存在泄漏的情况是,当您的 Activity 消失时,该 Handler
的消息队列中仍有一条消息。然而,通常情况并非如此。
查看您的代码后,我得出结论,您不能使您的 Handler
static
(即:和内部类),因为它需要对其外部类的引用( Activity )。此外,将其设为独立类(如 CommonsWare 的回答)也无济于事,因为在实例化独立类时需要传递对 Activity 的引用,因此这无助于解决“泄漏"要么(如果真的有的话)。不过,它可能会让愚蠢的 LINT 警告消失 :-)
如果您遇到内存问题,您应该使用 JHAT 或 MAT 等堆分析器,并在关注这些愚蠢的 lint 警告之前实际查看内存中有哪些对象。
另见 This Handler class should be static or leaks might occur: final Handler和 This Handler class should be static or leaks might occur: IncomingHandler
关于android - 由于 : This Handler class should be static or leaks might occur,我如何编写静态处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17428876/