1

我主要有一个Activity类,一个广播类(广播接收器的子类)和其他一些类。我Handler在广播类中创建了一个,用于将来要做的一些事情。但是如果出现某些情况(用户想要退出应用程序),我希望Handler取消(防止被执行)。

我在 SO 中阅读了很多关于如何取消的线程,Handlers并且我知道如何从同一类(Handler.removeCallback (Runnable )Handler.removeMessages(0))中取消。但我不知道如何从我的Activity. (用户按下退出按钮,如果处理程序要做一些工作,我想阻止它)。

那么如何从Activity类中引用该处理程序对象(将要执行)?

4

1 回答 1

0

我不确定我是否完全理解你的问题,但是,如果你想Handler通过活动取消,你可以把它放在onPause方法中:

@Override
public void onPause() {
    super.onPause();
    handler.removeCallbacks(runnable);
}

onPause当即将对用户隐藏活动时,将调用该方法。

重新阅读您的问题后,如果您的意思是BroadcastReceiver要从您的Activity类访问类中的处理程序,那么您应该使处理程序成为您活动的成员变量。

public class MyActivity extends Activity {

    private Handler mHandler = new Handler();

    public class BroadcastReceiver mReceiver = new BroadcastReceiver() {

        public void onReceive (Context context, Intent intent) {
            // ... use mHandler in here ....
            mHandler.postDelayed(runnable, 1000);
        }

    }

    // ... rest of the code ...

    @Override
    public void onPause() {
        super.onPause();
        handler.removeCallbacks(runnable);
    }

}

您可以在您的BroadcastReceiverActivity类中使用处理程序,使用mHandler. 您必须确保您的BroadcastReceiver不是static.Activity

于 2013-01-06T14:44:17.370 回答