Android开发-线程-Thread、Runable

147 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第28天,点击查看活动详情

上一篇我们介绍了线程的定义以及安卓中开发常用的几种线程的使用方式,最简单的直接使用Thread对象来创建线程,实现runnable接口来创建和使用线程,到通过组件的方式来实现,像AsyncTaskHandlerThreadIntentService这些内部也是通过线程实现,以及更高阶的对线程管理的线程池(ThreadPool)的使用,今天我们来介绍最简单的线程使用方式Thread,Runnable接口实现的线程使用,handler作为内部使用的线程,这里不着重介绍。

Thread、Runable的使用

Thread:作为线程的关键字,new Thread()是最原始的使用方式,也是最简单的使用方式,推及到以后所以的内部封装也离不开Thread。

public class MainActivity extends Activity {
    private Thread myThread;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main);
        btn_thread = findViewById(R.id.btnThread);
        btn_thread.setOnClickListener{ v-> 
            startThrad(); 
        }
    }

        private void startThrad(){ 
             myThread = new Thread(new Runnable() {
                @Override
                public void run() {
                    Intent intent = new Intent(MainActivity.this,SecondActivity.class); 
                     startActivity(intent); 
                }
             },1000).start();
        }


}

简单是实现了一个延迟一秒的activity跳转,这里是直接使用Thread,我么也可以通过实现runnable接口来实现:

public class MainActivity extends Activity {
    private MyThread myThread;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main);
        btn_thread = findViewById(R.id.btnThread);
        myThread = new Thread();
        btn_thread.setOnClickListener{ v-> 
            startThrad(); 
        }
    }

        private void startThrad(){ 
             myThread.start();
        }
     class MyThread implements Runnable{
        @Override
        public void run() {
             Intent intent = new Intent(MainActivity.this,SecondActivity.class); 
             startActivity(intent); 
        }
    }

}

对应直接new一个Thread对象也好,通过extends Thread 自定义一个线程也好,还是通过implements Runnable接口也好,最终都是在run方法中执行我们需要执行的耗时操作,所以我们在开发过程中我们不能在子线程中更新UI,因为线程什么时候执行我们不知道,如果我们开启很多线程去更新UI,那么我们的UI显示就会乱套了,但是我们可以通过异步消息处理机制的方式来更新UI,也就是我们最常用的Handler了,Handler的使用已经介绍,之前的文章已经简单介绍过了,以后有机会会再深入的介绍它。