Java Android在IntentService中重复运行功能
我有一个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
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秒左右。。它发送和接收一个非常短的包,因此连接不会超过几秒钟,这取决于互联网速度