android自定义侦听器-如何注销

android自定义侦听器-如何注销,android,android-intent,Android,Android Intent,我在android应用程序中编写了一个自定义侦听器,如下所示: private OnListener l = new OnListener() { @Override public void OnReceive() { Log.v(TAG, "Received response"); }; 它工作得很好,但是,当我设置l=null时,它仍然调用OnReceive()。这可能是因为它在一个单独的线程中运行,并且对它的引用仍然存在于事件调用方函数中。但是,如何确保如果我将其设置为null,它不

我在android应用程序中编写了一个自定义侦听器,如下所示:

private OnListener l = new OnListener() {
@Override
public void OnReceive() {
  Log.v(TAG, "Received response");
};

它工作得很好,但是,当我设置l=null时,它仍然调用OnReceive()。这可能是因为它在一个单独的线程中运行,并且对它的引用仍然存在于事件调用方函数中。但是,如何确保如果我将其设置为null,它不会接收任何内容?或者如何注销侦听器?

我不知道有关事件和线程的信息,但如果将空侦听器设置为控件,则它应该注销

我试过这个:

int timesFired=0;
Button btn2, btn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final TextView txt=(TextView)findViewById(R.id.textView1);
    btn1=(Button)findViewById(R.id.btn1);

    btn2=(Button)findViewById(R.id.btn2);
    btn1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            timesFired++;
            txt.setText("btn1's listener fired " + timesFired);
        }
    });

    btn2.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            btn1.setOnClickListener(null);
            txt.setText("btn1 unregistered");
        }
    });
}
它做了它应该做的