Android多线程编程

总认为这样的标题比较大,涉及面也比较广,鉴于自己的认知不够深入,所以没有写过类似的文章,今天谈一谈Android的多线程编程。

一、Android是只有一个主线程的程序。
我们知道,Android只有一个UI线程(主线程),每次更新UI都需要在主线程中,为了防止页面卡顿,我们需要对一些耗时操作全部放在子线程中,而由于线程开启后的不可控性,我们又需要线程池对线程的管理,这些不是本文的重点,就先不说。
二、多线程的几种方式。
Android中用到多线程实现方式分为4种,
1、Activity.runOnUiThread(Runnable)  
2、View.post(Runnable) ;View.postDelay(Runnable , long)  
3、Handler  
4、AsyncTask  
三、4种多线程实现方式的总结。
1、Activity.runOnUiThread(Runnable)  
private void testRunOnUIThread(Activity activity){
        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {

            }
        });
    }
2、View.post(Runnable)   用于实时刷新   
   View.postDelay(Runnable , long)    于延迟刷新   long为延迟多少毫秒
mTextView.post(new Runnable() {
    @Override
    public void run() {
        mTextView.setText("post");
        mTextView.setBackgroundColor(Color.RED);
    }
});
//延迟1000毫秒(1秒)刷新
private void method() {
    mTextView.setBackgroundColor(Color.BLACK);
    mTextView.postDelayed(new Runnable() {
        public void run() {
            mTextView.setVisibility(View.GONE);
            this.finish();
        }
    }, 1000);
}

3、Handler
先New一个handler对象,在根据Message的what标记进行分别并操作:

 private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 1:
                    btn.setText("更新UI");
                    break;
            }

        }
    };

使用时使用handler发送message:

Message message = new Message();
message.what = 1;
handler.sendMessage(message);

4、AsyncTask (异步)

class MyTask extends AsyncTask<String, String, String>{

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            Log.e("--------------", "开始前准备");
        }

        @Override
        protected String doInBackground(String... params) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onProgressUpdate(String... values) {
            super.onProgressUpdate(values);
            Log.e("--------------", "更新进度");
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Log.e("------------","更新UI");
            btn.setText("更新UI");
        }
    }
然后调用的时候:
new MyTask().execute();//执行任务

总结:1.四种方式各自有各自应用的场景,没有优劣之分。
2.遇到问题可以查,可以看视频,可以问,不要畏惧,要求甚解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值