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

时间:2014-08-07 12:52:00

标签: 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();
    }
};  

在代码的其他地方(在runnable中)我试图将sendEmptyMessage()发送到这个处理程序

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

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

1 个答案:

答案 0 :(得分:2)

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

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();