我正在关注教程链接http://www.coderzheaven.com/2012/07/14/ http请求-call-repeated-service-android但是有点混淆以下代码会重复进行http调用,所以一旦启动onstart()方法或onstartcommand()就会重复调用thread mythread.start();已完成或由于onstart()方法中的标志检查。因此,onstart()方法在启动线程完成后重复,或者在线程启动完成后返回onstart()。请告诉我。谢谢你。
以下是代码 - >>
package com.coderzheaven.pack;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class MyService extends Service{
private static String TAG = MyService.class.getSimpleName();
private MyThread mythread;
public boolean isRunning = false;
@Override
public IBinder onBind(Intent arg0) {
<span id="IL_AD9" class="IL_AD">return</span> null;
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate");
mythread = new MyThread();
}
@Override
public synchronized void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
if(!isRunning){
mythread.interrupt();
mythread.stop();
}
}
@Override
public synchronized void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.d(TAG, "onStart");
if(!isRunning){
mythread.start();
isRunning = true;
}
}
public void readWebPage(){
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet("http://google.com");
// Get the response
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String response_str = null;
try {
response_str = client.execute(request, responseHandler);
if(!response_str.equalsIgnoreCase("")){
Log.d(TAG, "Got Response");
}
} catch (Exception e) {
e.printStackTrace();
}
}
class MyThread extends Thread{
static final long DELAY = 3000;
@Override
public void run(){
while(isRunning){
Log.d(TAG,"Running");
try {
readWebPage();
Thread.sleep(DELAY);
} catch (InterruptedException e) {
isRunning = false;
e.printStackTrace();
}
}
}
}
}
答案 0 :(得分:0)
onstart方法被调用一次。 while循环重复那个(readWebPage())函数并在获得响应表单服务器后停止线程只是在readWebPage()方法中给isRunnble变量赋值false