Android多线程编程

来源:互联网 发布:js代码反混淆工具 编辑:程序博客网 时间:2024/05/29 10:20
总认为这样的标题比较大,涉及面也比较广,鉴于自己的认知不够深入,所以没有写过类似的文章,今天谈一谈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.遇到问题可以查,可以看视频,可以问,不要畏惧,要求甚解。

原创粉丝点击