Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android在IntentService中重复运行功能_Java_Android_Android Intent - Fatal编程技术网

Java Android在IntentService中重复运行功能

Java Android在IntentService中重复运行功能,java,android,android-intent,Java,Android,Android Intent,我有一个IntentService代码,它运行一次服务: protected void onHandleIntent(Intent intent) { final ResultReceiver receiver = intent.getParcelableExtra("receiver"); String command = intent.getStringExtra("command"); Bundle b = new Bundle(); b.putString

我有一个IntentService代码,它运行一次服务:

protected void onHandleIntent(Intent intent) {
    final ResultReceiver receiver = intent.getParcelableExtra("receiver");
    String command = intent.getStringExtra("command");
    Bundle b = new Bundle();
    b.putString("results", results);
    if(command.equals("query")) {
        receiver.send(1, Bundle.EMPTY);
        try {                   
            results = sendGetMessage();
            b.putString("results", results);
            receiver.send(2, b);
        } catch(Exception e) {
            b.putString(Intent.EXTRA_TEXT, e.toString());
            receiver.send(0, b);
        }    
    }
    this.stopSelf();
    Log.d("ServiceFinished", "ServerConnection.java Service has finished");
}

我希望sendGetMessage()函数每5秒重复运行一次,直到我停止服务。。我该怎么做呢?

您可能希望将它放在自己的线程中,并永远循环它

Thread thread = new Thread()
{
    @Override
    public void run() {
        try {
            while(true) {
                Thread.sleep(5000); // for the 5 seconds requirement
                results = sendGetMessage();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
};

thread.start();

您可能希望将它放在自己的线程中,并永远循环它

Thread thread = new Thread()
{
    @Override
    public void run() {
        try {
            while(true) {
                Thread.sleep(5000); // for the 5 seconds requirement
                results = sendGetMessage();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
};

thread.start();

有很多选择,但我更喜欢使用。请参见下面的示例代码:

ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(1);

// This schedule a task to run every 5 seconds:
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
  public void run() {
    // Do the actual job:
    results = sendGetMessage();

    // In case if you need update UI, simply do this:
    runOnUiThread(new Runnable() {
      public void run() {
        // update your UI component here.
        myTextView.setText("refreshed");
      }
    }); // end of runOnUiThread
  }
}, 0, 5, TimeUnit.SECONDS);

请记住在停止服务之前正确完成/关闭可运行任务。

有很多选择,但我更喜欢使用。请参见下面的示例代码:

ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(1);

// This schedule a task to run every 5 seconds:
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
  public void run() {
    // Do the actual job:
    results = sendGetMessage();

    // In case if you need update UI, simply do this:
    runOnUiThread(new Runnable() {
      public void run() {
        // update your UI component here.
        myTextView.setText("refreshed");
      }
    }); // end of runOnUiThread
  }
}, 0, 5, TimeUnit.SECONDS);

请记住在停止服务之前正确完成/关闭可运行任务。

这也是一个糟糕的解决方案:系统可以选择最终终止您的线程…@AsafNevo,我添加了一行代码,可以让它每5秒运行一次。@ajacian81你能帮我实现你在我写的代码中写的代码吗?这仍然会完全耗尽电池寿命,这会让用户尖叫着离开你的应用程序,并强迫它疯狂地关闭…@Kristopher Micinski我想了一下,你是对的,我将把服务器连接的间隔改为30秒左右。。它发送和接收一个非常短的包,因此连接不会超过几秒钟,这取决于互联网速度。这也是一个糟糕的解决方案:系统可以选择最终杀死你的线程…@AsafNevo,我添加了一行代码,可以让它每5秒运行一次。@ajacian81你能帮我实现你在我写的代码中写的代码吗?这仍然会完全耗尽电池寿命,这会让用户尖叫着离开你的应用程序,并强迫它疯狂地关闭…@Kristopher Micinski我想了一下,你是对的,我将把服务器连接的间隔改为30秒左右。。它发送和接收一个非常短的包,因此连接不会超过几秒钟,这取决于互联网速度