【问题标题】:send heartbeat gcm?发送心跳gcm?
【发布时间】:2014-08-02 06:45:26
【问题描述】:

我使用 GCM 开发 android 应用程序,我想每 5 分钟一次发送一次心跳,我在服务运行时创建它,这些是我的代码,

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分钟发送一次心跳成功,但问题是我的应用程序运行缓慢并且消耗大量电池,除了按照我的方式发送心跳还有什么方法? 我的意思是,比我的方法更好的方法。

请帮忙。

【问题讨论】:

    标签: android google-cloud-messaging heartbeat


    【解决方案1】:

    使用TimerTask 提供比使用线程(ref) 更好的性能。但是TimerTask 不擅长同时处理多个线程,这在您的情况下不是问题,因为您正在重复执行一项任务.

    这是定时器的代码:

    首先初始化一个Timer:

    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
    

    我不确定是否有另一种性能更好的解决方案,但这绝对比以固定速率运行线程更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      相关资源
      最近更新 更多