- public class HeartbeatService extends Service implements Runnable
- {
- private Thread mThread;
- public int count = 0;
- private boolean isTip = true;
- private static String mRestMsg;
- private static String KEY_REST_MSG = "KEY_REST_MSG";
- @Override
- public void run()
- {
- while (true)
- {
- try
- {
- if (count > 1)
- {
- Log.i("@qi", "offline");
- count = 1;
- if (isTip)
- {
- //判断应用是否在运行
- ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
- List<RunningTaskInfo> list = am.getRunningTasks(3);
- for (RunningTaskInfo info : list)
- {
- if (info.topActivity.getPackageName().equals("org.yhn.demo"))
- {
- //通知应用,显示提示“连接不到服务器”
- Intent intent = new Intent("org.yhn.demo");
- intent.putExtra("msg", true);
- sendBroadcast(intent);
- break;
- }
- }
- isTip = false;
- }
- }
- if (mRestMsg != "" && mRestMsg != null)
- {
- //向服务器发送心跳包
- sendHeartbeatPackage(mRestMsg);
- count += 1;
- }
- Thread.sleep(1000 * 3);
- }
- catch (InterruptedException e)
- {
- e.printStackTrace();
- }
- }
- }
- private void sendHeartbeatPackage(String msg)
- {
- HttpGet httpGet = new HttpGet(msg);
- DefaultHttpClient httpClient = new DefaultHttpClient();
- // 发送请求
- HttpResponse httpResponse = null;
- try
- {
- httpResponse = httpClient.execute(httpGet);
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- if (httpResponse == null)
- {
- return;
- }
- // 处理返回结果
- final int responseCode = httpResponse.getStatusLine().getStatusCode();
- if (responseCode == HttpStatus.SC_OK)
- {
- //只要服务器有回应就OK
- count = 0;
- isTip = true;
- }
- else
- {
- Log.i("@qi", "responseCode " + responseCode);
- }
- }
- @Override
- public IBinder onBind(Intent intent)
- {
- return null;
- }
- @Override
- public void onCreate()
- {
- super.onCreate();
- }
- @Override
- public void onDestroy()
- {
- super.onDestroy();
- }
- public void onStart(Intent intent, int startId)
- {
- Log.i("@qi", "service onStart");
- //从本地读取服务器的URL,如果没有就用传进来的URL
- mRestMsg = getRestMsg();
- if (mRestMsg == null || mRestMsg == "")
- {
- mRestMsg = intent.getExtras().getString("url");
- }
- setRestMsg(mRestMsg);
- mThread = new Thread(this);
- mThread.start();
- count = 0;
- super.onStart(intent, startId);
- }
- public String getRestMsg()
- {
- SharedPreferences prefer = getSharedPreferences("settings.data", Context.MODE_PRIVATE);
- Log.i("@qi", "getRestMsg() " + prefer.getString(KEY_REST_MSG, ""));
- return prefer.getString(KEY_REST_MSG, "");
- }
- public void setRestMsg(String restMsg)
- {
- SharedPreferences prefer = getSharedPreferences("settings.data", Context.MODE_PRIVATE);
- SharedPreferences.Editor editor = prefer.edit();
- editor.putString(KEY_REST_MSG, restMsg);
- editor.commit();
- }
- }
启动Service:
- Intent serviceIntent = new Intent("HeartbeatService");
- serviceIntent.putExtra("url",url);
- startService(serviceIntent);
最后别忘了注册Server和GET_TASKS
- <service
- android:name=".demo.HeartbeatService"
- android:label="QServer"
- android:persistent="true" >
- <intent-filter>
- <action android:name="HeartbeatService" />
- </intent-filter>
- </service>
- <uses-permission android:name="android.permission.GET_TASKS" />
![](https://img-my.csdn.net/uploads/201302/01/1359706305_3310.png)
来源:http://blog.csdn.net/vestigge/article/details/8563447