安卓中多線程間通信方式


背景
安卓開發中多線程間通信是比較常見的操作,現對常用的幾種方式先進行一波簡單的總結。
一、通過handler方式

    Handler handler = new Handler() {
        @Override
        public void handleMessage(@NonNull Message msg) {
            Toast.makeText(MainActivity.this, "handleMessage", Toast.LENGTH_SHORT).show();
            Log.d(TAG, "handleMessage" + msg.what);
        }
    };
    new Thread() {
            @Override
            public void run() {
                for (int i = 0; i < 1000; i++) {
                    Message message = new Message();
                    message.what = 3;
                    handler.sendMessage(message);
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();

二、子線程中使用runOnUiThread方法

    TextView tv;
    

    tv = findViewById(R.id.tv);

    new Thread() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        tv.setText("子線程設置testView");
                    }
                });
            }
        }.start();

三、子線程中使用View.post(Runnable r) 方式

    TextView tv;

    tv = findViewById(R.id.tv);
    
    new Thread() {
            @Override
            public void run() {
                tv.post(new Runnable() {
                    @Override
                    public void run() {
                        tv.setText("子線程設置text");
                    }
                });
            }
        }.start();

四、通過AsyncTask(Deprecated,不推薦)

    TextView tv;

    tv = findViewById(R.id.tv);
    
    class MyAsyncTask extends AsyncTask {
        @Override
        protected Object doInBackground(Object[] objects) {
            for (int i = 0; i < 3; i++) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return objects[0].toString();
        }

        @Override
        protected void onPostExecute(Object o) {
            super.onPostExecute(o);
            tv.setText(o.toString());
        }
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM