首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Handler或true?

使用Handler或true?
EN

Stack Overflow用户
提问于 2016-02-02 12:49:41
回答 1查看 826关注 0票数 2

我想知道,如果我希望在一个标志为真的情况下每五秒钟执行一次任务,我应该使用什么。我是在一个很好的设备上运行的,所以性能很重要。

选项一是使用Handler:

代码语言:javascript
运行
复制
public void handleLocation() {
    handler.postDelayed(new Runnable() {
        public void run() {
            Toast.makeText(mContext, "Five Seconds", Toast.LENGTH_SHORT).show();          // this method will contain your almost-finished HTTP calls
            if (currentLocation != null && isWorking) {
                setMockLocation(currentLocation);
                setMockLocation2(currentLocation);
            }
            handler.postDelayed(this, FIVE_SECONDS);
        }
    }, FIVE_SECONDS);
}

第二个选择是使用线程:

代码语言:javascript
运行
复制
 public void run() {
    Thread thread = new Thread() {
        @Override
        public void run() {
            try {
                while (true) {
                    if (isWorking) {
                        if (currentLocation != null)
                            setMockLocation(currentLocation);
                        setMockLocation2(currentLocation);
                    }
                    sleep(5000);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
                Toast.makeText(mContext, mContext.getString(R.string.err0_unknown), Toast.LENGTH_LONG).show();
            }
        }
    };

    thread.start();
}

你喜欢用什么?有没有更好的解决办法?

EN

回答 1

Stack Overflow用户

发布于 2016-02-02 14:07:15

不应该有任何一种选择,而应该知道不同之处,并选择最适合具体情况的选项。

postDelayed

在这种情况下,代码将在附加处理程序的同一个线程上运行。

--如果--这是您的主(UI)线程--那么确保您不会使用此方法执行长时间运行的任务。

这也意味着您不能保证任务每5秒精确运行一次。如果处理程序线程繁忙,则您的任务将不得不等待。

新螺纹

在第二种情况下,将产生一个新线程来处理这个任务。在我看来,这只适合在线程与应用程序具有相同的生存期并经常繁忙的情况下考虑。否则,我将使用一条信息,如在第一或第三个选项中,您没有列出:

AsyncTask

它非常支持在任务运行后更新UI。

默认情况下,异步任务在共享线程上运行,但可以在线程池线程上执行:

代码语言:javascript
运行
复制
new YourAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);

IntentService

运行专用线程的另一种选择是启动服务。它有自己的生命周期,不像异步任务那样受UI生命周期的影响。

TimerTask

这是可用的,但与postDelayed技术相比,我不知道有什么优势。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35154003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档