我不得不声明一个静态处理程序,因为一些 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/