0

ハンドラーを使用して、あるスレッドから UI スレッドにメッセージを送信しようとしています。プッシャー API (pusher.com) を使用してメッセージを送信しています。それらが入ってきて、それらが非常に速く入ってくるのを見ることができますが、UI スレッドがハンドラーを介してメッセージを取得するのに時間がかかり、何かが入ってくるとすぐに送信して解放するのではなく、メッセージをキューに入れます。

メッセージがハンドラーに入るとすぐにそれを処理するように、ハンドラーなしでこれを行うより良い方法、またはキューを取り除く方法はありますか?

これは、スレッド内に入ってきたメッセージを送信しています

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

        }




};
4

1 に答える 1

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
    }

};
于 2012-09-19T20:17:26.260 に答える