2013-07-02 62 views
1

在我的項目中,由於虛擬機預算超過,它會一直崩潰。我使用的照片都非常小,但據說他們一直在填充虛擬機。我正在通過eclipse工作,並注意到它給我以下錯誤的兩個實例。如何編碼靜態處理程序,因爲:此處理程序類應該是靜態的或可能發生泄漏

這個處理程序類應該是靜態的或可能發生泄漏(com.quickreaction.BT_screen_menuButtons.2)BT_screen_menuButtons.java/BT_activity_root/src目錄/ COM/quickreaction線1091的Android林特問題

當我跟着兩個環節此是它帶給我的源代碼。

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(); 

} };

我一直在閱讀堆棧溢出有關使處理程序靜態或弱,但不知道如何。任何想法

回答

0

而不是使用匿名內部類的一個實例(例如,new Handler() {}),創建一個靜態內部類(如static class MyHandler extends Handler)或普通的Java類(class MyHandler extends Handler),並用它來代替。

+0

是否加入或者這些代碼的要求更多的代碼來設置MyHandler的? – user2543132

+0

@ user2543132:您只需調用'new MyHandler()'來創建MyHandler類的實例。 – CommonsWare

1

有關製作Handlerweakstatic的這些棉絨消息通常可以忽略。如果您正在創建Handler並在您的活動中存儲對其的引用,那麼當您的活動被破壞時,Handler也將消失。這裏沒有泄漏。唯一可能發生泄漏的時間是,如果當您的活動消失時,消息隊列中仍有一條消息,表示該消息爲Handler。但是,通常情況並非如此。

看完你的代碼後,我得出結論,你不能讓你的Handlerstatic(即:和內部類),因爲它需要對其外部類(活動)的引用。另外,使它成爲一個獨立的類(就像在CommonsWare的答案中一樣)也無濟於事,因爲當你實例化獨立類時你需要傳遞一個對你的活動的引用,所以這不會幫助解決「泄漏「要麼(如果真的有一個)。它可能會得到愚蠢的LINT警告消失,但:-)

如果您有內存問題,您應該使用像JHAT或MAT堆分析器,並實際上看到你在內存中有什麼對象之前注意到這些愚蠢的皮棉警告。

又見This Handler class should be static or leaks might occur: final HandlerThis Handler class should be static or leaks might occur: IncomingHandler

相關問題