public class HeartbeatService extends Service implements Runnable{private ThreadmThread;public intcount= 0;private booleanisTip= true;private static StringmRestMsg;private static StringKEY_REST_MSG= "KEY_REST_MSG";@Overridepublic 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){//只要服务器有回应就OKcount = 0;isTip = true;}else{Log.i("@qi", "responseCode " + responseCode);}}@Overridepublic IBinder onBind(Intent intent){return null;}@Overridepublic void onCreate(){super.onCreate();}@Overridepublic void onDestroy(){super.onDestroy();}public void onStart(Intent intent, int startId){Log.i("@qi", "service onStart");//从本地读取服务器的URL,如果没有就用传进来的URLmRestMsg = 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" />


运行效果:
Android 后台Service : 向服务器发送心跳包_第1张图片




更多相关文章

  1. 在iis上运行的服务器端程序,运行一段时间后,访问都只出现一行乱码,
  2. 分享html元素调用服务器实例
  3. 关于.NET后台定时服务框架的简单介绍
  4. 关于ASP.NET如何利用AjaxPro完成前端跟后台交互的实例分析
  5. .net验证后台页面是否登录实例教程
  6. 关于WebSocket部署服务器外网无法连接的解决方案
  7. 仪器设备改造技术,实现测量数据上传到服务器的功能
  8. 基于汇编的 C/C++ 协程(用于服务器)的实现
  9. C# 快速手动构建文件服务器

随机推荐

  1. Android 用户界面(User Interface)概要
  2. android之模拟手机助手下载
  3. 报错记录-The option ‘android.enableUn
  4. android 如何判断开机完成
  5. Java中的WeakReference 和 SoftReference
  6. Android Studio 更换debug.keystore问题
  7. Android 4.0 Launcher2源码分析——导入e
  8. Android RxJava:一步步带你源码分析 RxJav
  9. Android Telephony启动过程源码分析
  10. Android中Handler的简析