java - 如何将消息发送到静态处理程序?

标签 java android

我不得不声明一个静态处理程序,因为一些 Java 废话和泄漏。

static class ParsingCompleteHandler extends Handler {
    private final WeakReference<BackupActivity> mTargetActivity;
    ParsingCompleteHandler(BackupActivity targetActivity) {
        mTargetActivity = new WeakReference<BackupActivity>(targetActivity);
    }

    @Override
    public void handleMessage(Message msg) {
        BackupActivity targetActivity = mTargetActivity.get();
        targetActivity.updateDialog();
    }
};  

在代码的其他地方(在可运行的内部)我试图将 sendEmptyMessage() 发送给这个处理程序

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            lastBackupDataObject = getBackupDataObjectFromFile(file);   
            parsingCompleteHandler.sendEmptyMessage(0);
        }
    };
    Thread parsingThread = new Thread(runnable);
    parsingThread.start();

但由于 sendEmptyMessage() 方法不是静态的(现在的处理程序是静态的),显然我不能这样做。我需要向处理程序发送一条消息,因为这就是它的用途。我该怎么做?

最佳答案

您可以通过将您的处理程序对象作为类全局对象来执行此操作,而不是调用此消息,这应该可以工作

eg.

public class SomeClass{

ParsingCompleteHandler  parsingCompleteHandler;


static class ParsingCompleteHandler extends Handler {
    private final WeakReference<BackupActivity> mTargetActivity;
    ParsingCompleteHandler(BackupActivity targetActivity) {
        mTargetActivity = new WeakReference<BackupActivity>(targetActivity);
    }

    @Override
    public void handleMessage(Message msg) {
        BackupActivity targetActivity = mTargetActivity.get();
        targetActivity.updateDialog();
    }
}; 

比做

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            lastBackupDataObject = getBackupDataObjectFromFile(file);   
            parsingCompleteHandler.sendEmptyMessage(0);
        }
    };
    Thread parsingThread = new Thread(runnable);
    parsingThread.start();

关于java - 如何将消息发送到静态处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25183046/

相关文章:

java - 使用 OrbitzWorld 的 consul-client 观察 Consul 中特定键的变化

android - 在 Android 平板电脑和手机之间同步数据

Android XML 富文本处理

java - 使用 PrintWriter 将多行字符串打印到文件中时遇到问题

java - 动态数组创建导致 ArrayIndexOutOfBoundsException 和 NullPointerException

java - Jersey REST WS - 请求正文 UTF-8

java - 如何使用if语句检查用户输入是否是某种变量类型?

android - 导入/导出到 android sqlite 数据库

android - 将图像加载到 ImageView Android

java - 使用 GSON 解析 json 对象与 json 数组