我正在尝试使用处理程序从一个线程向我的UI线程发送消息。我正在使用推送器API(pusher.com)发送消息。他们进来了,我可以看到他们进入的速度非常快,但UI线程需要一段时间才能通过处理程序获取消息,并且只要有东西进入就会排队,而不是发送和释放。
有没有一种更好的方法可以在没有处理程序的情况下执行此操作或者摆脱队列,以便在处理程序处理消息时立即处理它?</ p>
这是发送线程内的消息
public void onEvent(String eventName, String eventData, String channelName) {
String sentence = new String(eventData);
try {
Message msg = new Message();
Bundle b = new Bundle();
b.putString("message",sentence);
msg.setData(b);
// send message to the handler with the current message handler
mHandler.sendMessage(msg);
} catch (Exception e) {
Log.v("Error", e.toString());
}
Log.e("server Thread", eventData);
// mHandler.obtainMessage(MakeLightActivity.PACKET_CAME,sentence).sendToTarget();
}
这就是我在UI线程中读取它的地方
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Bundle b = msg.getData();
String key = b.getString("message");
incomingMessage = key;
if (key.length() >= 30){
Log.d(TAG, "key" + key);
messageCame(key);
}
}
};
答案 0 :(得分:0)
是的,有更好的方法
您必须使用处理线程和处理程序功能的AsyncTask
。
private AsyncTask<Params, Progress, Result> imageLoader = new AsyncTask<Params, Progress, Result>()
{
@Override
protected Result doInBackground(Params)
{
// do the work and onPostExecute will handle the result
return result;
};
protected void onPostExecute(Result result)
{
// do whatever with the result on the UI thread instead of a Handler
}
};