5
Tôi có một mã rất đơn giản:lớp Handler này cần được tĩnh hoặc rò rỉ có thể xảy ra
package com.example.conn08;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
public class MainActivity extends Activity
{
private static CustomHandler mHandler;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
updateUI();
}
private class CustomHandler extends Handler
{
@Override
public void handleMessage(Message msg)
{
MainActivity.this.updateUI();
}
public void sleep(long delayMillis)
{
this.removeMessages(0);
sendMessageDelayed(obtainMessage(0), delayMillis);
}
}
private void updateUI()
{
mHandler.sleep(1000);
Log.v("updateUI", "kokoko");
}
}
Nhưng trong
MainActivity.this.updateUI();
tôi thấy
lớpHandler này cần được tĩnh hoặc rò rỉ có thể xảy ra (com.example.conn08.MainActivity.CustomHandler)
Tại sao? giúp hài lòng
đang được sửa đổi:
package com.example.conn08;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
updateUI();
}
static class CustomHandler extends Handler
{
WeakReference<MainActivity> mActivity;
CustomHandler(MainActivity aFragment)
{
mActivity = new WeakReference<MainActivity>(aFragment);
}
@Override
public void handleMessage(Message message)
{
MainActivity theActivity = mActivity.get();
theActivity.this.updateUI();
}
}
private CustomHandler mHandler = new CustomHandler(this);
private void updateUI()
{
//mHandler.sleep(1000);
Log.v("updateUI", "kokoko");
}
}
Tôi đã chỉnh sửa nó như trong ví dụ ở đây Handlers and memory leaks in Android, nhưng bây giờ tôi đã "theActivity không thể được giải quyết cho một loại"
thả 'theActivity.this' và chỉ sử dụng' theActivity'. Đó là một 'Tham chiếu' với' theActivity.this' của bạn, vì vậy nó gấp đôi. – tolgap