我有一个Activity
类,一个广播类(广播接收器的子类)和其他几个类。我使用在广播类中创建的Handler
来处理将来要做的一些事情。但是如果出现某些情况(用户想要退出应用程序),我希望Handler
取消(阻止执行)。
我在SO中阅读了很多关于如何取消Handlers
的线程,并且我知道如何从同一个班级(Handler.removeCallback (Runnable )
,Handler.removeMessages(0)
等)。但我不知道如何从Activity
取消它。 (用户按下退出按钮,如果处理程序要做一些工作,我想阻止它)。
那么如何从Activity
类引用该处理程序对象(将要执行)?
答案 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);
}
}
您可以使用BroadcastReceiver
在Activity
和mHandler
课程中使用处理程序。您必须确保BroadcastReceiver
课程不 static
Activity
内部课程。