1

如果我们考虑效率,是否可以跟随?

new Runnable() {

        @Override
        public void run() {
            try {
                final Runnable uitask = new Runnable() {
                    public void run() {
                        //sth that modifies UI
                    }
                };

                for (...) {
                    context.runOnUiThread(uitask);
                    Thread.sleep(...);
                }
            } catch (Throwable t) {
            }
        }
    }

我最担心 runOnUi 可能每次都会创建新线程,这会很糟糕吗?我是对的还是它像 ThreadPool 一样聪明?

4

2 回答 2

5

好吧,runOnUiThread 不会创建新线程,它会在现有 UI 线程上启动您的可运行对象。

但你可以代替你的代码

 void onCreate(..) {
     ...
     mHandler = new Handler();
 }

 for (...) {
     mHandler.postDelayed(uitask, DELAY * i++);
 }
于 2013-08-20T15:09:06.657 回答
0

我最担心 runOnUi 可能每次都会创建新线程,这会很糟糕吗?

出色地。这取决于您想要达到的目标。在 Android 中,本机线程效率不高。有更有效的方法来做后台工作(SDK 提供了它们)。

如果你想做一些周期性的工作,你可以使用Handler来实现你的目标。只需创建一个Runnable,然后您就可以发送定期回调请求。另一种解决方案是使用在后台运行的服务。它们直接指定用于长时间运行的任务,并为后台处理提供了非常方便的方式。

有时您需要通知用户有关任务当前进度的一些信息,因此在这种情况下,您可以简单地使用提到的 Handler 或AsyncTask

我认为您的解决方案既不干净也不高效。例如,如果您要创建 40 个线程,那么您的工作根本不会更快或更高效。您的 GB 会尖叫,应用程序将占据大部分,CPU而高电池消耗是您不应该允许的。

于 2013-08-20T15:23:56.133 回答