经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
Android中切换到主线程执行的方法
来源:jb51  时间:2021/3/1 10:47:46  对本文有异议

方法一: view.post(Runnable runnable)

使用 view 对象,调用 post 方法即可在主线程中执行里边的代码,postDelayed 是延时执行,也可以达到相同的效果。例如:

  1. textView.post(new Runnable() {
  2. @Override
  3. public void run() {
  4. textView.setText("更新textView");
  5. }
  6. });
  7.  

方法二:runOnUiThread(Runnable runnable)

在 Acitivity 中直接调用 runOnUiThread 或者将 Activity 的 context 对象传入子线程调用。例如:

  1. runOnUiThread(new Runnable() {
  2. public void run() {
  3. textView.setText("更新textView");
  4. }
  5. }
  6.  

方法三:handler.post(Runnable runnable)

如果是在主线程可以直接 new 一个 Handler 对象,如果是在子线程需要获取主线程的 Looper 和 Queue

  1. // 主线程
  2. Handler handler = new Handler();
  3. // 子线程
  4. Handler handler = new Handler(Looper.getMainLooper());
  5.  

然后调用 post 方法,或者 postAtTime、postAtDelayed 即可。例如:

  1. handler.post(new Runnable() {
  2. @Override
  3. public void run() {
  4. textView.setText("更新textView");
  5. }
  6. });
  7.  

方法四:handler.sendMessage(Message message)

这个是比较常用的方法通过 sendMessage 发送消息,然后在 handleMessage 中进行处理。例如:

  1. Handler handler = new Handler() {
  2. @Override
  3. public void handleMessage(Message msg) {
  4. super.handleMessage(msg);
  5. // 处理消息
  6. textView.setText("更新textView" + msg);
  7. switch(msg.what) {
  8. case 0:
  9. // 处理指定消息
  10. break;
  11. }
  12. }
  13. };
  14. handler.sendEmptyMessage(0);

方法五:使用 AsynTask

  1. AsyncTask asyncTask = new AsyncTask() {
  2. @Override
  3. protected Object doInBackground(Object[] objects) {
  4. return null;
  5. }
  6.  
  7. @Override
  8. protected void onPostExecute(Object o) {
  9. super.onPostExecute(o);
  10. }
  11. };
  12.  

doInBackground 方法执行是在子线程中,其返回结果会传递到 onPostExecute 方法中,onPostExecute 就是运行在主线程。

以上就是几种常用的切换到主线程执行的方法,更多相关Android切换到主线程执行内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号