5
Ich habe einen sehr einfachen Code:Diese Handler-Klasse sollte statisch sein oder Undichtigkeiten auftreten
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");
}
}
Aber in
MainActivity.this.updateUI();
Ich sehe
Diese Klasse Handler statisch sein sollte oder Lecks können auftreten (com.example.conn08.MainActivity.CustomHandler)
Warum? Hilfe
Edited Code bitte:
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");
}
}
Ich habe es wie hier Handlers and memory leaks in Android, in Beispiel bearbeitet, aber jetzt habe ich
Lassen Sie die 'theActivity.this' fallen und verwenden Sie' theActivity'. Es ist eine 'Referenz' zu deiner' TheActivity.this', also doppelt. – tolgap