2012-11-10 22 views
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ớp

Handler 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"

+1

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

Trả lời

0

Thay đổi:

theActivity.this.updateUI(); 

tới:

theActivity.updateUI(); 

vì khi bạn nói theActivity, nó cũng giống như nói điều này.

Các vấn đề liên quan