一旦从活动类触发启动服务,就会重复调用onstartcommand服务类方法

时间:2015-01-01 16:35:04

标签: android service

我正在关注教程链接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();
                }
            }
        }

    }

}

1 个答案:

答案 0 :(得分:0)

onstart方法被调用一次。 while循环重复那个(readWebPage())函数并在获得响应表单服务器后停止线程只是在readWebPage()方法中给isRunnble变量赋值false