android开发分享何时使用handler.post()和何时新的线程()

我想知道什么时候应该使用handler.post(runnable); 什么时候应该使用new Thread(runnable).start();

在Handler的开发者文档中提到:

导致Runnable r被添加到消息队列中。 runnable将在该处理程序所连接的线程上运行。

这是否意味着如果我写在Activity类的onCreate()

 Handler handler = new Handler(); handler.post(runnable); 

那么runnable将在一个单独的线程或在Activity的线程中被调用?

    每当你想在UI线程中执行操作时,你应该使用Handler.post()

    所以,让我们说在callback(这是运行在单独的线程),你想改变一个TextView的文本,你应该使用Handler.post()

    在Android中,和许多其他UI框架一样,UI元素(小部件)只能从主线程修改。


    编辑:长时间运行任务的例子

     mHandler = new Handler(); new Thread(new Runnable() { @Override public void run () { // Perform long-running task here // (like audio buffering). // you may want to update some progress // bar every second, so use handler: mHandler.post(new Runnable() { @Override public void run () { // make operation on UI - on example // on progress bar. } }); } }).start(); 

    当然,如果您要执行的任务时间很长,并且存在用户可能同时切换到另一个应用程序的风险,则应考虑使用服务 。

    为了回答你的具体问题:

    这是否意味着如果在我写的Activity类的onCreate中:

    Handler handler = new Handler()hanlder.post(runnable); 那么,runnable将在一个单独的线程或在Activity的线程中被调用?

    不,不会的。 Runnable将在主线程上被调用。 处理程序只是简单地用于发送消息到它所连接的线程(它被创build的地方)。 它不会自行创build线程。 在你的例子中,你在主线程(在Activity.OnCreate()被调用的地方)创build了一个Handler,因此任何发布在这个Handler上的消息都只会在主线程上运行。

    举例说明:

     mHandler = new Handler(); new Thread(new Runnable(){ @Override public void run () { mHandler.post(new Runnable() { @Override public void run () { mUiView.setX(x); } }); } }).start(); 

    或者,您可以跳过处理程序,直接在视图上使用post方法:

     new Thread(new Runnable(){ @Override public void run () { mUiView.post(new Runnable() { @Override public void run () { mUiView.setX(x); } }); } }).start(); 

    这是一个很好的post,概述了差异: post方法到底是什么?

    当你想把代码(通常是从后台线程)发布主线程时,使用handler.post() 。 是啊,POST,就像你一样,给别人写信。 在处理程序的帮助下,代码将尽快执行即时。

    以上就是android开发分享何时使用handler.post()和何时新的线程()相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/512985.html

      (0)
      上一篇 2020年11月27日
      下一篇 2020年11月27日

      精彩推荐