我正在编写一个应用程序,该应用程序应该从网站获取一些值并通知某些条件是否为真。为此,我创建了一个服务,该服务应该不间断运行并启动警报。
在服务文档中它说:
请注意,服务与其他应用程序对象一样,在其托管进程的主线程中运行。这意味着,如果您的服务要执行任何 CPU 密集型(例如 MP3 播放)或阻塞(例如网络)操作,它应该生成自己的线程来完成这项工作。
因此,我目前正在服务的 onStartCommand() 中创建一个新线程,其中包含要运行的代码。一些网络动作正在做另一个类,我正在创建另一个线程。这是一个好习惯吗?
在 AsyncTask 的文档中它说:
如果您需要保持线程长时间运行,强烈建议您使用 java.util.concurrent 包提供的各种 API,例如 Executor、ThreadPoolExecutor 和 FutureTask。
是否推荐使用其中一个命名的 API?
这是我当前使用的代码的摘录:
public class MyService extends Service {
private MyClass x = new MyClass();
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
tWorker = new Thread(new Runnable() {
@Override
public void run() {
while(!tWorker.isInterrupted()) {
if(x.alarm()) { //action here }
}
});
tWorker.start();
}
}
public clas MyClass{
public boolean alarm(){
//get HTML, extract value and return true or false in a new thread
}
}
这种做法是否值得推荐或更好地使用其他选项?
编辑:对于我的使用情况,我应该更喜欢哪一个命名的 API?