方法一: view.post(Runnable runnable)
使用view对象,调用post方法即可在主线程中执行里边的代码,postDelayed是延时执行,也可以达到相同的效果。例如:
textView.post(new Runnable() {
@Override
public void run() {
textView.setText("更新textView");
}
});
方法二:runOnUiThread(Runnable runnable)
在Acitivity中直接调用runOnUiThread或者将Activity的context对象传入子线程调用。例如:
runOnUiThread(new Runnable() {
public void run() {
textView.setText("更新textView");
}
}
方法三:handler.post(Runnable runnable)
如果是在主线程可以直接new一个Handler对象,如果是在子线程需要获取主线程的Looper和Queue
// 主线程
Handler handler = new Handler();
// 子线程
Handler handler = new Handler(Looper.getMainLooper());
然后调用post方法,或者postAtTime、postAtDelayed即可。例如:
handler.post(new Runnable() {
@Override
public void run() {
textView.setText("更新textView");
}
});
方法四:handler.sendMessage(Message message)
这个是比较常用的方法通过sendMessage发送消息,然后在handleMessage中进行处理。例如:
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// 处理消息
textView.setText("更新textView" + msg);
switch(msg.what) {
case 0:
// 处理指定消息
break;
}
}
};
handler.sendEmptyMessage(0);
方法五:使用AsynTask
AsyncTask asyncTask = new AsyncTask() {
@Override
protected Object doInBackground(Object[] objects) {
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
}
};
doInBackground方法执行是在子线程中,其返回结果会传递到onPostExecute方法中,onPostExecute就是运行在主线程。
以上就是几种常用的切换到主线程执行的方法,希望能够帮助到大家。
网友评论