2012-11-10 9 views
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

+1

Lassen Sie die 'theActivity.this' fallen und verwenden Sie' theActivity'. Es ist eine 'Referenz' zu deiner' TheActivity.this', also doppelt. – tolgap

Antwort

0

Change "theActivity kann nicht auf eine Art gelöst werden":

theActivity.this.updateUI(); 

zu:

theActivity.updateUI(); 

weil, wenn Sie dieAktivität sagen, es ist wie dies zu sagen.