Android的处理程序没有收到邮件使用HandlerThread

问题描述 投票:3回答:1

IA M在我下面的代码使用HandlerThread和处理程序,其实我尝试从可运行到处理程序回调更新数据。

在每一个循环中的sendMessage()函数调用,但我没有收到回调nothhing。我很想念?

public class MainActivity extends AppCompatActivity {

    private TextView result;
    HandlerThread handlerThread = new HandlerThread("bThread");

    Callback callBack = new Callback(){

        @Override
        public boolean handleMessage(Message message) {
            Bundle bundle = message.getData();
            String val = bundle.getString("output");
            result.setText(val);

            return false;
        }
    };
    private Handler handler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        result = findViewById(R.id.result);
        handlerThread.start();
        handler = new Handler(handlerThread.getLooper(),callBack);
        handler.post(runnable);
    }

    Runnable runnable= new Runnable() {
        @Override
        public void run() {
            for (int i = 0; i <200 ; i++) {
                try {
                    Message message = new Message();
                    Bundle bundle = new Bundle();
                    bundle.putString("output",i+"");
                    message.setData(bundle);
                    handler.sendMessage(message);
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    };

}
java android handler message-queue android-handlerthread
1个回答
0
投票

我的事情你的代码工作

问题是在低于线

             Thread.sleep(3000);

注释此行并运行代码是工作或者增加一些更短的时间之如下面的代码。

    package com.myapplication;

    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.HandlerThread;
    import android.os.Message;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;

    public class HandleActivity extends Activity implements View.OnClickListener {

        private TextView tvMessage;
        private Button btSendMesaage;
        private HandlerThread handlerThread = new HandlerThread("hthread");

        private Handler.Callback callback = new Handler.Callback() {
            @Override
            public boolean handleMessage(Message msg) {
                Bundle bundle = msg.getData();
                String messsage = bundle.getString("output");
                tvMessage.setText(messsage);
private Handler.Callback callback = new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            Bundle bundle = msg.getData();
            String messsage = bundle.getString("output");
            tvMessage.setText(messsage);
            try{
            Thread.sleep(3000);}catch (Exception e){}
            return false;
        }
    };

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.handler_activity);
            initLayout();
            handlerThread.start();
        }

        private void initLayout() {
            tvMessage = (TextView) findViewById(R.id.textview);
            btSendMesaage = (Button) findViewById(R.id.button);
            btSendMesaage.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.button:
                    sendMessage();
                    break;
                default:
                    break;
            }
        }

        private Handler handler;

        private void sendMessage() {

            handler = new Handler(handlerThread.getLooper(), callback);
            handler.post(runnable);
        }

        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 200; i++) {
                    try {
                        Message message = new Message();

                        Bundle bundle = new Bundle();
                        bundle.putString("output", i + "");
                        message.setData(bundle);

                        handler.sendMessage(message);

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        };
    }
© www.soinside.com 2019 - 2024. All rights reserved.