java - 从主 Activity 引用处理程序对象

标签 java android handler

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

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

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

最佳答案

我不确定我是否完全理解您的问题,但是,如果您想通过 Activity 取消 Handler ,您可以将其放入 onPause 方法中:

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

当 Activity 即将对用户隐藏时,将调用 onPause 方法。

重新阅读您的问题后,如果您的意思是要从 Activity 类访问 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);
    }

}

您可以使用 mHandlerBroadcastReceiverActivity 类中使用处理程序。您必须确保您的 BroadcastReceiver不是 Activitystatic 内部类。

关于java - 从主 Activity 引用处理程序对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14182846/

相关文章:

java - 安卓 Espresso : PerformException

events - ng-repeat 完成后调用函数

java swing 多个 jpanel

java - JQuery:日期选择器突出显示日期范围

没有父 Activity 的android Activity

java - ENOENT (No such file or directory) 当那里有文件时

c# - 在 GetIncationList() 之后获取合适的 eventHandler

javascript - JQuery Mousehold 插件的问题

java - 这个 while 循环似乎没有循环 - 循环中只有数学

java - Microsoft Graph 身份验证 - 委派权限