如果考虑效率,可以做以下事吗?
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更聪明?
答案 0 :(得分:5)
好吧,runOnUiThread不会创建新线程,它会在现有UI线程上启动runnable。
但不是你的代码,你可以做
void onCreate(..) {
...
mHandler = new Handler();
}
for (...) {
mHandler.postDelayed(uitask, DELAY * i++);
}
答案 1 :(得分:0)
我最担心的是runOnUi可能会分别创建新的线程 时间,这会非常糟糕吗?
好。这取决于你想要达到的目标。在Android中,本机线程效率不高。如何进行后台工作有更有效的方法(SDK提供)。
如果您想做一些定期工作,可以使用Handler来实现目标。只需创建一个Runnable
,然后您就可以发送定期回调请求。另一种解决方案是使用在后台运行的Services。它们直接用于长期运行的任务,并为后台处理提供了非常便利的方式。
有时您需要告知用户有关您的任务当前进度的一些信息,因此在这种情况下,您只需使用提到的处理程序或AsyncTask。
我认为您的解决方案并不干净有效。如果您将创建例如40个Threads,那么您的工作将不会更快或更高效。您的GB会尖叫,应用程序将占用CPU
的大部分内容,并且您不应该允许高电量消耗。