在学习android时会碰到多线程的情况,不知道应用场景,所以自己总结一下
1)新建一个类继承自Threadh(或者实现Runnable接口),创建线程。然后重写父类的run()方法,并在里面编写耗时逻辑。
private class Mythread extends Thread {
public void run() {
// 编写具体的逻辑
}
}
在主线程中启动此线程时输入
new Mythread().start();
应用场景:是java创建线程的方法,在android不常用,android有自己的方法,只用在不涉及更新ui时,才会使用。
2)android采用异步消息处理机制。在主进程中只发送消息,并不执行操作也不关心操作结果。
- 使用Handler的post(mRunnable)方法。post(mRunnable)的会调用Runnable对象,执行Runnable对象里的run()方法。
- 使用Handler的handler.sendMessage(message)方法,将Message对象发送出去。在Handler中handleMessage()方法中接收Message对象,再根据message.what的值(int)执行相应操作。
- 新建一个类继承自AsyncTask,会创建子线程,可以通过重写onPreExecute( ),doInBackground( ), onProgressUpdate( ),onPostExecute( )进行界面初始化,处理耗时任务,更新界面元素,返回的数据等复杂操作。
新建一个类在主线程中启动时输入:
new MyAsyncTask().execute();
注意:Handler方法只是发送消息,在接收消息的地方执行命令,不会新建子线程。在主进程中发送消息并不执行操作,所以不堵塞主进程,但是如果操作太耗时,仍会在接收处堵塞主进程。
应用场景:在进行需要根据message.what的值进行判断的任务使用handleMessage()。需要自我调用的,不断更新的使用post(mRunnable)方法。会堵塞主进程的功能使用AsyncTask。