软件编程
位置:首页>> 软件编程>> Android编程>> Android中切换到主线程执行的方法

Android中切换到主线程执行的方法

作者:lebronzhen  发布时间:2023-08-19 07:02:28 

标签:Android,主线程,执行

方法一: 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 就是运行在主线程。

来源:https://juejin.cn/post/6934250830342291469

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com