Android:AsyncTask或带ExecutorService的普通Java线程
我的应用程序使用Android:AsyncTask或带ExecutorService的普通Java线程,java,android,multithreading,Java,Android,Multithreading,我的应用程序使用服务做一些后台工作。我在服务中使用额外的线程来进行一些计算。为此,我每5到10秒创建两个线程,它们运行5到10秒。但我不知道应该使用哪种线程模型: 异步任务: 优点: 易于使用 特定于android的 简单的用户界面交互 缺点: 因为我必须使用API级别10,所以没有带有固定线程池的ExecutorService来执行异步任务 普通Java线程: 优点: 带有固定线程池的ExecutorService 缺点: 不太容易处理,例如UI交互 哪种型号更适合使用?特别是
服务
做一些后台工作。我在服务中使用额外的线程来进行一些计算。为此,我每5到10秒创建两个线程,它们运行5到10秒。但我不知道应该使用哪种线程模型:
- 易于使用
- 特定于android的
- 简单的用户界面交互
- 因为我必须使用API级别10,所以没有带有固定线程池的
来执行异步任务ExecutorService
- 带有固定线程池的ExecutorService
- 不太容易处理,例如UI交互
哪种型号更适合使用?特别是在性能方面。当我使用AsyncTasks时是否会有很大的开销,ExecutorService在创建新的AsyncTasks时是否比Android更快地重用线程?如果您查看
AsyncTask
的实现,您会看到它使用自己的线程池使用“普通Java线程”
当我使用AsyncTasks时是否会有很大的开销,ExecutorService在重用线程方面是否比Android创建新的AsyncTasks更快
两者之间应该没有实质性的区别。我用的是针;一个开源、简单且功能强大的Android多线程库。有了它,你可以说:
Needle.onMainThread().execute(new Runnable() {
@Override
public void run() {
// e.g. change one of the views
}
});
或
Needle.onBackgroundThread().execute(新的UiRelatedTask()){
@凌驾
受保护整数doWork(){
int结果=1+2;
返回结果;
}
@凌驾
受保护的void-thenDoUiRelatedWork(整数结果){
mSomeTextView.setText(“结果:+result”);
}
});
专业人士
- 非常简单的API
- 固定线程池大小
- 可自定义的线程池大小
- 支持UI交互(“在UI线程上执行工作,然后使用结果”)
- 安卓1.5+
- 在所有平台版本上的行为相同
- 额外库依赖项
在GitHub上查看它:没错,谢谢!这看起来很有希望。我将在我的下一个项目中试一试。
Needle.onBackgroundThread().execute(new UiRelatedTask<Integer>() {
@Override
protected Integer doWork() {
int result = 1+2;
return result;
}
@Override
protected void thenDoUiRelatedWork(Integer result) {
mSomeTextView.setText("result: " + result);
}
});