Android多线程

1.沿用java的子线程创建

private void createNewThread(){
        //1.用继承Thread的方式创建子线程,耦合性比较大
        MyNewThread thread=new MyNewThread();
        thread.start();

        //2.用Runnable的方式创建子线程
        MyThread mThread=new MyThread();
        Thread myThread=new Thread(mThread);
        myThread.start();

        //3.用匿名内部类的方式创建子线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                Log.d("csc","正在用匿名内类方式创建子线程,当前线程的id为"+Thread.currentThread().getId());
            }
        }).start();

    }
class MyNewThread extends Thread{
        @Override
        public void run() {
            super.run();
            Log.d("csc","正在用继承Thread方式创建子线程,当前线程的id为"+Thread.currentThread().getId());
        }
    }
    class MyThread implements Runnable{

        @Override
        public void run() {
            Log.d("csc","正在用接口实现方式创建子线程,当前线程的id为"+Thread.currentThread().getId());
        }
    }

2.在子线程中不能更新UI,那么在Android中更新UI的方法

private static final int UPDATE_TEXT=1;
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case UPDATE_TEXT:
                    textChange.setText("我在这儿等着你回来");
                    break;
            }
        }
    };
    private TextView textChange;
 Message message=new Message();
 message.what=UPDATE_TEXT;
 handler.sendMessage(message);

runOnUiThread内部的原理也是使用了handler来处理。

3.AsyncTask的使用

class DownloadTask extends AsyncTask{
        @Override
        protected void onPreExecute() {
            //执行任务前调用
            Log.d("csc","在执行耗时操作之前被调用");
        }

        @Override
        protected Object doInBackground(Object[] params) {
            //这里进行耗时操作
            for (int i=0;i<10;i++){
                try {
                    Thread.sleep(2000);
                    Log.d("csc","正在执行第"+(i+1)+"次耗时操作");
                    publishProgress((i+1)*10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    return false;
                }
            }
            return true;
        }

        @Override
        protected void onProgressUpdate(Object[] values) {
            //对UI进行更新操作,调用publishProgress()得到执行
            Toast.makeText(ThreadActivity.this,"当前进度是"+values[0],Toast.LENGTH_SHORT).show();
            Log.d("csc","当前进度是"+values[0]);
        }

        @Override
        protected void onPostExecute(Object o) {
            //执行任务后调用
            boolean result=(boolean)o;
            if (result){
                Log.d("csc","耗时任务已经执行完毕");
                Toast.makeText(ThreadActivity.this,"耗时任务已经执行完毕",Toast.LENGTH_SHORT).show();
            }else {
                Log.d("csc","任务执行失败");
                Toast.makeText(ThreadActivity.this,"任务执行失败",Toast.LENGTH_SHORT).show();
            }
        }
    }
new DownloadTask().execute();
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,171评论 25 708
  • Java 多线程 线程和进程的区别 线程和进程的本质:由CPU进行调度的并发式执行任务,多个任务被快速轮换执行,使...
    安安zoe阅读 2,266评论 1 18
  • 简介 1. 线程分类 主线程(UI线程) : 处理和界面相关的事情. 子线程 : 处理耗时操作. Android中...
    王世军Steven阅读 977评论 0 2
  • 这几天在研究Android的多线程方面的知识,阅读了许多大牛的文章,发现Android的多线程方式挺多的,关于各种...
    HangChen阅读 322评论 0 0
  • 和.《夜访》 大山坡生水帘洞 一怪夜游黄梁梦 万户俱寂无声息 满桌书人相陪同 庐阳盛情...
    文字砌匠阅读 195评论 5 14

友情链接更多精彩内容