How to create a Looper thread, then send it a message immediately?

后端 未结 4 1725
离开以前
离开以前 2020-11-30 17:47

I have a worker thread that sits in the background, processing messages. Something like this:

class Worker extends Thread {

    public volatile Handler hand         


        
4条回答
  •  暖寄归人
    2020-11-30 18:04

    This is my solutions: MainActivity:

    //Other Code
    
     mCountDownLatch = new CountDownLatch(1);
            mainApp = this;
            WorkerThread workerThread = new WorkerThread(mCountDownLatch);
            workerThread.start();
            try {
                mCountDownLatch.await();
                Log.i("MsgToWorkerThread", "Worker Thread is up and running. We can send message to it now...");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            Toast.makeText(this, "Trial run...", Toast.LENGTH_LONG).show();
            Message msg = workerThread.workerThreadHandler.obtainMessage();
            workerThread.workerThreadHandler.sendMessage(msg);
    

    The WorkerThread Class:

    public class WorkerThread extends Thread{
    
        public Handler workerThreadHandler;
        CountDownLatch mLatch;
    
        public WorkerThread(CountDownLatch latch){
    
            mLatch = latch;
        }
    
    
        public void run() {
            Looper.prepare();
            workerThreadHandler = new Handler() {
                @Override
                public void handleMessage(Message msg) {
    
                    Log.i("MsgToWorkerThread", "Message received from UI thread...");
                            MainActivity.getMainApp().runOnUiThread(new Runnable() {
    
                                @Override
                                public void run() {
                                    Toast.makeText(MainActivity.getMainApp().getApplicationContext(), "Message received in worker thread from UI thread", Toast.LENGTH_LONG).show();
                                    //Log.i("MsgToWorkerThread", "Message received from UI thread...");
                                }
                            });
    
                }
    
            };
            Log.i("MsgToWorkerThread", "Worker thread ready...");
            mLatch.countDown();
            Looper.loop();
        }
    }
    

提交回复
热议问题