不间断运行的服务-线程,AsyncTask还是执行器?

时间:2019-04-28 10:14:31

标签: android

我正在编写一个应从网站获取一些值并通知某些条件是否正确的应用。为此,我创建了一个服务,该服务应不间断运行并启动警报。

在服务文档中说:

  

请注意,服务与其他应用程序对象一样,在主目录中运行   他们托管过程的线程。这意味着,如果您的服务是   要做任何占用大量CPU资源(例如MP3播放)或阻止   (例如网络)操作,则应在   该做什么。

因此,我目前正在服务的onStartCommand()中创建一个新线程,其中包含要运行的代码。 一些网络操作正在做另一个类,在这个类中我正在创建另一个线程。这是个好习惯吗?

在AsyncTask的文档中说:

  

如果您需要保持线程长时间运行,则可以   强烈建议您使用由   java.util.concurrent包,例如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?

1 个答案:

答案 0 :(得分:0)

是的,最佳实践是按照文档所述使用API​​。使用Java的线程系统可能会由于多种原因在Android上导致问题,例如杀死后台进程的应用等。您的线程可能最终会一直停止。使用Android特定的类的麻烦要少一些,因为它们被设计为可以处理Android设备上发生的所有事情。