-1

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

在服务文档中它说:

请注意,服务与其他应用程序对象一样,在其托管进程的主线程中运行。这意味着,如果您的服务要执行任何 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?

4

1 回答 1

0

是的,最佳做法是使用文档中所述的 API。使用 Java 的线程系统可能会由于多种原因导致 Android 出现问题,例如应用程序杀死后台进程等。您的线程可能最终会一直停止。使用 Android 特定的类更容易,因为它们旨在处理 Android 设备上发生的所有事情。

于 2019-04-28T10:30:46.903 回答