主活动中的引用处理程序对象

时间:2013-01-06 14:00:22

标签: java android handler

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

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

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

1 个答案:

答案 0 :(得分: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);
    }

}

您可以使用BroadcastReceiverActivitymHandler课程中使用处理程序。您必须确保BroadcastReceiver课程 static Activity内部课程。