方法一: 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 就是运行在主线程。
以上就是几种常用的切换到主线程执行的方法,更多相关Android切换到主线程执行内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!