2014-06-12 1 views
1

나는하트 비트 gcm을 보내시겠습니까?

public class sendHeartbeat extends Service{ 
    private Handler customHandler = new Handler(); 
    private static final String TAG = "MyService"; 

    @Override 
    public IBinder onBind(Intent arg0) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 

     Log.d(TAG, "onCreate"); 
    } 

    @Override 
    public void onStart(Intent intent, int startId) { 

     Log.d(TAG, "onStart"); 
     customHandler.postDelayed(updateTimerThread, 0); 
    } 

    @Override 
    public void onDestroy() { 
     Log.d(TAG, "onDestroy"); 
    } 

    private Runnable updateTimerThread = new Runnable() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      new syncGetHeartbeat().execute(); 
      Log.d("send hearbeat","send hearrrrrrrbeat"); 

      customHandler.postDelayed(this, 260000); 
     } 
    }; 


    class syncGetHeartbeat extends AsyncTask<Void, Void, String> { 
     @Override 
     protected String doInBackground(Void... unsued) { 
      try {      
       String varId="naengoland"; 
       String url = "http://mydomain.com/gcmserver/getHeartbeat.php?id="+varId; 
       getRequestJSON(url); 

       return null; 
      } catch (Exception e) { 
       Log.e(e.getClass().getName(), "service get hertbeat "+ e.toString()); 
       return null; 
      } 

     } 

     @Override 
     protected void onProgressUpdate(Void... unsued) { 

     } 

     @Override 
     protected void onPostExecute(String sResponse) { 

     } 
    } 

    public String getRequestJSON(String Url){ 
     HttpClient client = new DefaultHttpClient(); 
     HttpGet request = new HttpGet(Url); 
     try{ 
      client.execute(request); 
     }catch(Exception ex){ 
     } 
     return null; 
    } 
} 

내가 성공적으로 매 5 분 동안 하트 비트를 보내, 내가 서비스가 실행될 때,이 내 코드입니다 그것을 만드는, 내가 한 번 매 5 분 동안 하트 비트를 보내려면, 안드로이드 응용 프로그램 사용 GCM을 개발 ,하지만 문제는 내 애플 리케이션이 천천히 실행하고 배터리를 많이 소비, 내 방식대로 옆에 하트 비트를 보낼 수있는 방법이 있습니까? 내 방법보다 나은 방법입니다.

도와주세요. TimerTask를 사용

답변

0

그러나 TimerTask 당신이 반복적으로 하나의 작업을하고 있기 때문에 귀하의 경우 문제가되지 않습니다 동시에 여러 개의 스레드를 처리하기에 좋지 않다 .. 스레드 (ref)를 사용하는 것보다 더 나은 성능을 제공합니다.

private Timer timer; 

onCreate에서 :

timer = new Timer(); 

다음 내의 onStart :

timer.scheduleAtFixedRate(new TimerTask() { 

     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      new syncGetHeartbeat().execute(); 
      Log.d("send hearbeat","send hearrrrrrrbeat"); 

     } 
    }, 0, 300000); //means start at 0 second and each 5 mins (300000 ms) run the task 
012,351

먼저 Timer 초기화 여기

는 타이머의 코드

성능이 좋은 다른 솔루션이 있는지 확실하지 않지만 고정 된 속도로 스레드를 실행하는 것보다 낫습니다.

관련 문제