當我打電話的時候,經常是new
運營商。 最近我有1個問題。是否發生memoryleak在Handler中調用方法時使用new運算符?
在處理程序中使用new
運算符調用方法時是否存在問題?
首先請看看源
public clas MainActivity extends Activity {
private final static int MSG_START = 1000;
private fian lstatic int INTERVAL = 300000;/5 MIN
private recordHandler recordHandler = new recordHandler(this);
//click record button
@Override
public void onClick(View v) {
recordHandler.sendEmptyMessage(RECORD_START);
}
private static final class recordHandler extends Handler {
private final WeakReference<MainActivity> weak;
public recordHandler(MainActivity act) {
weak = new WeakReference<>(act);
}
public void handleMessage(Message msg) {
MainActivity act = weak.get();
if (act != null) {
switch (msg.what) {
case RECORD_START:
//do record start
new MainActivity().startRecord();
new MainActivity().recordHandler.sendEmptyMessageDelayed(MSG_START, INTERVAL);
break;
}
}
}
private static final Runnable runnable = new Runnable() {
@Override
public void run() {
}
};
}
這個來源,當用戶點擊錄製按鈕,開始記錄每5分。
無論如何,我想重構以防止內存泄漏。
也許,new
運算符發生memoryleak?
使用new運算符調用處理程序內部的方法時會出現問題嗎?
感謝閱讀:)如果你把在靜態字段中的一些對象,卻忘了讓空使用它後,會出現
是什麼讓你覺得你有內存泄漏?什麼讓你的東西GC不會處理它? – John3136