我正在为android编写一个简单的套接字客户端应用程序,这是我的处理程序类:
static Handler IncomingHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (flag) {
kq += msg.obj.toString() + "\r\n";
textResponse.setText(kq);
}
}
};
此处理程序有一个"应该是静态的或可能发生泄漏"警告,它做到了。它使用40%CPU保持循环运行。
根据这个question,我将我的处理程序类改为
static class IncomingHandler extends Handler {
private final WeakReference<MainActivity> mService;
IncomingHandler(MainActivity service) {
mService = new WeakReference<MainActivity>(service);
}
@Override
public void handleMessage(Message msg)
{
MainActivity service = mService.get();
if (service != null) {
if (flag) {
kq += msg.obj.toString() + "\r\n";
textResponse.setText(kq);
}
}
}
}
它没有&#34;可能发生泄漏&#34;警告了,但现在出现了一个新问题:我无法从另一个班级引用IncomingHandler
public class ClientTask extends AsyncTask<String, String, String> implements
OnListener {
////Some random code
void sendMessage(String msg) {
try {
if (!msg.equals("bye"))
MainActivity.IncomingHandler.obtainMessage(0, 0, -1, "Me: " + msg)
.sendToTarget();
else
MainActivity.IncomingHandler.obtainMessage(0, 0, -1,
"Disconnecting!").sendToTarget();
} catch (Exception ioException) {
ioException.printStackTrace();
}
}
现在它说&#34;非静态方法getsMessage不能从静态上下文引用“。但是使IncomingHandler非静态使整个事情毫无意义。无论如何我可以从静态上下文中使用obtainMessage吗?
EDIT1:我尝试添加static IncomingHandler incoming = new IncomingHandler(MainActivity.this);
并使用MainActivity.incoming.obtainMessage();
,但它说&#34; MainActivity.this无法从静态上下文中引用&#34;所以评论者&#39;建议不适合我。
EDIT2:我很愚蠢,我忘了删除&#34; MainActivity&#34;来自MainActivity.incoming.obtainMessage()
。问题仍然存在。
答案 0 :(得分:1)
创建IncomingHandler
的对象,并在该对象上调用obtainMessage()
。
试试这段代码,
IncomingHandler incoming = new IncomingHandler(this);
incoming.obtainMessage();