gpt4 book ai didi

android - 由于 : This Handler class should be static or leaks might occur,我如何编写静态处理程序

转载 作者:行者123 更新时间:2023-11-30 03:31:22 25 4
gpt4 key购买 nike

在我的项目中,由于超出 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 weakstatic 的 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 HandlerThis 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com