安卓三种线程同步方式:1. Thread+Handler 2. Handler+HandlerThread 3. AnsyncTask
2017-03-03 10:59
260 查看
public class MainActivity extends AppCompatActivity {
Handler mChildHandler;
HandlerThread mHandlerThread;
Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1. AsyncTask
new ImageAsyncTask().execute();
/*2. HandlerThread
mHandler = new Handler();
mHandlerThread = new HandlerThread("handlerThread");
mHandlerThread.start();
mChildHandler = new Handler(mHandlerThread.getLooper());
mChildHandler.post(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
mHandler.post(new Runnable() {
@Override
public void run() {
findViewById(R.id.imageview).setVisibility(View.VISIBLE);
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});*/
/*3. Thread+Handler
new ChildThread().start();*/
}
@Override
protected void onResume() {
super.onResume();
}
class ImageAsyncTask extends AsyncTask<String, Integer, Boolean>{
@Override
protected Boolean doInBackground(String... params) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Boolean aBoolean) {
findViewById(R.id.imageview).setVisibility(View.VISIBLE);
}
}
class ChildThread extends Thread{
@Override
public void run() {
super.run();
try {
sleep(2000);
mHandler.post(new Runnable() {
@Override
public void run() {
findViewById(R.id.imageview).setVisibility(View.VISIBLE);
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Handler mChildHandler;
HandlerThread mHandlerThread;
Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1. AsyncTask
new ImageAsyncTask().execute();
/*2. HandlerThread
mHandler = new Handler();
mHandlerThread = new HandlerThread("handlerThread");
mHandlerThread.start();
mChildHandler = new Handler(mHandlerThread.getLooper());
mChildHandler.post(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
mHandler.post(new Runnable() {
@Override
public void run() {
findViewById(R.id.imageview).setVisibility(View.VISIBLE);
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});*/
/*3. Thread+Handler
new ChildThread().start();*/
}
@Override
protected void onResume() {
super.onResume();
}
class ImageAsyncTask extends AsyncTask<String, Integer, Boolean>{
@Override
protected Boolean doInBackground(String... params) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Boolean aBoolean) {
findViewById(R.id.imageview).setVisibility(View.VISIBLE);
}
}
class ChildThread extends Thread{
@Override
public void run() {
super.run();
try {
sleep(2000);
mHandler.post(new Runnable() {
@Override
public void run() {
findViewById(R.id.imageview).setVisibility(View.VISIBLE);
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
相关文章推荐
- 线程同步三种方式
- java 三种多线程的创建方法Thread,Handler,Runnable
- Android中子线程和UI线程之间通信的方式(Handler与Thread-附源码)
- java多线程三种方式区别,java多线程,线程同步方式,线程同步加锁的方法,wait与sleep区别
- iOS多线程三种方式:NSThread,NSOperationQueue,GCD
- 线程同步的三种方式(Mutex,Event,Critical Section)
- 安卓多线程编程系列7:使用Looper的不同方式(子线程中实例化Handler方式)
- spring mvc handler的三种方式
- IOS 多线程,线程同步的三种方式
- java 实现线程的三种方式 Thread 、Runnable、 Callable Future
- java 三种多线程的创建方法Thread,Handler,Runnable
- 【安卓笔记】Handler+Thread使用浅析
- 【安卓笔记】android客户端与服务端交互的三种方式
- 线程同步的三种方式
- 安卓handler、thread实现异步任务
- 线程同步的三种方式(Mutex,Event,Critical Section)[转]
- 安卓点击按钮的三种响应方式
- 三种线程同步方式
- JAVA多线程实现的三种方式(继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程)
- 安卓多线程编程系列6:使用Looper的不同方式(主线程中实例化Handler方式)