Android多线程,异步消息处理机制, Thread, AsyncTask 简单总结

今天看到了Android 多线程,以及异步消息处理机制,这里做一下简单的总结。


一、Android多线程的基本用法--Thread类

这里有两种方法.:
方法一:  新建一个类,继承自 Thread
    class mythread extends Thread {
        @Override
        public void run() {
            while (true) {
                Log.e("TTTTTTTTTTT", System.currentTimeMillis() + "");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

开始这个线程: new mythread().start()

方法二: 实现Runable接口
    class mythread implements Runnable {
        @Override
        public void run() {
            while (true) {
                Log.e("ttttttttttttt", System.currentTimeMillis() + "");
            }
        }
    }

开始这个线程:new Thread(new mythread()).start()

二、Android 异步消息处理机制 Handler, Message

Android的UI 操作只能在主线程里操作, 举个简单的例子,如果你想在子线程里面TextView.setText(), 应用肯定会报错的。如何处理? 这里引出了handler机制。

简单流程:
1.  子线程里进行逻辑运算,然后创建一个Message 对象, 给message.what 复制,调用handler.sendMessage()方法。
Message message = new Message();
message.what = 1
handler.sendMessage();
2. handler 处理Message, 因为hander 是在主线程里运行,这里就可以更新UI了,例如setText()
    Handler handler = new Handler(new Handler.Callback(){
        @Override
        public boolean handleMessage(Message msg) {
            if (msg.what == 1) {
                tvDisplay.setText("Good good play, Hard hard study");
            }
            return true;
        }
    });
  class mythread extends Thread {
        @Override
        public void run() {
            Message message = new Message();
            message.what = 1;
            handler.sendMessage(message);

        }
    }

比如用button来激活这个线程
    public void onClick(View v) {
           new mythread().start();
    }
   

三、 使用AsyncTask 处理异步消息

如何需要更新UI, 在doInBackground(){...} 方法中 publishProgress(), 在onProgressUpate()中更新UI。

public class DemoAsyncTask extends AppCompatActivity {
    TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_demo_async_task);
        Button btcClick = (Button) findViewById(R.id.btnClick);
        tv = (TextView) findViewById(R.id.tv);
        btcClick.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new update().execute();
            }
        });
    }

    class update extends AsyncTask<Void, Void,Boolean> {
        
        @Override
        protected Boolean doInBackground(Void... params) {
            publishProgress();
            return null;
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
            tv.setText("Nice to meet you ");
        }
    }
}






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值