我必须声明一个静态处理程序,因为有些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()
方法不是静态的(现在是处理程序),显然我不能这样做。我需要向处理程序发送一条消息,因为这就是它的用途。我该怎么做?
答案 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();