Ver Fonte

1.3.12 bugfix:强制升级-静默安装后台管理系统未更新安装成功状态,其他优化(日志、Handler)

xwh há 6 meses atrás
pai
commit
fa4abe9ad2
1 ficheiros alterados com 178 adições e 149 exclusões
  1. 178 149
      app/src/main/java/com/hh/hhomc/services/BackgroundService.java

+ 178 - 149
app/src/main/java/com/hh/hhomc/services/BackgroundService.java

@@ -16,6 +16,7 @@ import android.os.Build;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Looper;
+import android.os.Message;
 import android.os.RemoteException;
 import android.text.TextUtils;
 import android.view.View;
@@ -24,6 +25,7 @@ import android.widget.ImageView;
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.core.content.FileProvider;
 
@@ -111,6 +113,10 @@ import static com.hh.hhomc.common.Constants.VALUE.TIME_INSTALL_INTERVAL;
 
 public class BackgroundService extends Service {
 
+    private final String INSTALL_TAG="INSTALL-------";
+    private final int WHAT_HEART=0x20;  //websocket 心跳轮询
+    private final int  WHAT_ANSTALL=0x21;  //检测是否安装轮询
+
     String websocketUrl;
 
 
@@ -150,7 +156,7 @@ public class BackgroundService extends Service {
                         FileInfo fileInfo = (FileInfo) intent.getSerializableExtra(EXTRA_INTENT_DOWNLOAD);
 
                         String filePath = fileInfo.getFilePath();
-                        AppLogUtils.e("广播--filePath=" + filePath);
+                        AppLogUtils.e(INSTALL_TAG+"广播--filePath=" + filePath);
                         // /storage/emulated/0/Android/data/com.hh.hhomc/cache/download/hharome_v2.2.1_app.apk
 
                         // 可对应ServerActionAppUpdateRequestBean中的filepath
@@ -161,7 +167,7 @@ public class BackgroundService extends Service {
                         float downSize = fileInfo.getDownloadLocation() / 1024.0f / 1024;
                         float totalSize = fileInfo.getSize() / 1024.0f / 1024;
 
-                        AppLogUtils.e("progress--" + progress);
+                        AppLogUtils.e(INSTALL_TAG+"progress--" + progress);
 
 
                         ServerActionAppUpdateResultBean sendInstallBean = new ServerActionAppUpdateResultBean();
@@ -179,17 +185,17 @@ public class BackgroundService extends Service {
                             // 下载中(可取消)
                             sendInstallBean.setStatus(1);
                             String resultStr = gson.toJson(sendInstallBean);
-                            AppLogUtils.e("发送apk安装升级消息--resultStr: " + resultStr);
+                            AppLogUtils.e(INSTALL_TAG+"发送apk安装升级消息--resultStr: " + resultStr);
 
                             sendMessageByWebSocket(resultStr);
 
 
                         } else if (progress == 100) {
-                            AppLogUtils.e("apkCompleteNum--" + apkCompleteNum);
+                            AppLogUtils.e(INSTALL_TAG+"apkCompleteNum--" + apkCompleteNum);
                             if (apkCompleteNum < 1) {
                                 // 升级类型 1:强制升级 2:静默升级
                                 if (upgradeType == 1) {
-                                    AppLogUtils.e("强制升级---开始安装");
+                                    AppLogUtils.e(INSTALL_TAG+"强制升级---开始安装");
                                     // 1:强制升级
                                     // 开始安装
                                     delayInstallApk();
@@ -197,21 +203,21 @@ public class BackgroundService extends Service {
                                     // 安装中
                                     sendInstallBean.setStatus(3);
                                     String resultStr = gson.toJson(sendInstallBean);
-                                    AppLogUtils.e("发送apk安装升级消息--resultStr: " + resultStr);
+                                    AppLogUtils.e(INSTALL_TAG+"发送apk安装升级消息--resultStr: " + resultStr);
 
                                     sendMessageByWebSocket(resultStr);
 
                                 } else if (upgradeType == 2) {
                                     // 2:静默升级
                                     // 等待安装(静默升级 可取消)
-                                    AppLogUtils.e("静默升级");
+                                    AppLogUtils.e(INSTALL_TAG+"静默升级");
 
                                     // map循环
                                     for (String key : apkUrlMap.keySet()) {
-                                        AppLogUtils.e("map-key:" + key);
+                                        AppLogUtils.e(INSTALL_TAG+"map-key:" + key);
                                         ServerActionAppUpdateRequestBean serverUpdateBean = apkUrlMap.get(key);
                                         if (serverUpdateBean.getFilePath().equals(downloadUrlFileInfo)) {
-                                            AppLogUtils.e("map循环中,静默升级---有对应下载url");
+                                            AppLogUtils.e(INSTALL_TAG+"map循环中,静默升级---有对应下载url");
                                             // 设置为静默
                                             if (serverUpdateBean.isSilentInstall()) {
                                                 isSilentInstall = true;
@@ -222,7 +228,7 @@ public class BackgroundService extends Service {
 
 
                                     if (isSilentInstall) {
-                                        AppLogUtils.e("静默升级---开始安装");
+                                        AppLogUtils.e(INSTALL_TAG+"静默升级---开始安装");
                                         // 已经下载完了,启动时安装
                                         isSilentInstall = false;
 
@@ -233,17 +239,17 @@ public class BackgroundService extends Service {
                                         // 第一次下载完成
                                         sendInstallBean.setStatus(2);
                                         String resultStr = gson.toJson(sendInstallBean);
-                                        AppLogUtils.e("发送apk安装升级消息--resultStr: " + resultStr);
+                                        AppLogUtils.e(INSTALL_TAG+"发送apk安装升级消息--resultStr: " + resultStr);
 
                                         sendMessageByWebSocket(resultStr);
 
 
                                         // map循环
                                         for (String key : apkUrlMap.keySet()) {
-                                            AppLogUtils.e("map-key:" + key);
+                                            AppLogUtils.e(INSTALL_TAG+"map-key:" + key);
                                             ServerActionAppUpdateRequestBean serverUpdateBean = apkUrlMap.get(key);
                                             if (serverUpdateBean.getFilePath().equals(downloadUrlFileInfo)) {
-                                                AppLogUtils.e("map循环中,静默升级---有对应下载url");
+                                                AppLogUtils.e(INSTALL_TAG+"map循环中,静默升级---有对应下载url");
                                                 // 设置为静默
                                                 serverUpdateBean.setSilentInstall(true);
 
@@ -256,14 +262,14 @@ public class BackgroundService extends Service {
                                 // 强制时,可能点了取消。静默时,要下次启动app时
                                 // 保存,供下次启动时安装
                                 String mapString = gson.toJson(apkUrlMap);
-                                AppLogUtils.e("下载完后apkInfoMapStr--set--" + mapString);
+                                AppLogUtils.e(INSTALL_TAG+"下载完后apkInfoMapStr--set--" + mapString);
                                 localConfig.setApkInfoMapStr(mapString);
                                 String apkInfoMapStr = localConfig.getApkInfoMapStr("");
-                                AppLogUtils.e("下载完后apkInfoMapStr--get--" + apkInfoMapStr);
+                                AppLogUtils.e(INSTALL_TAG+"下载完后apkInfoMapStr--get--" + apkInfoMapStr);
 
 
                                 apkCompleteNum = apkCompleteNum + 1;
-                                AppLogUtils.e("apkCompleteNum +1后--" + apkCompleteNum);
+                                AppLogUtils.e(INSTALL_TAG+"apkCompleteNum +1后--" + apkCompleteNum);
                             }
                         }
 
@@ -293,12 +299,8 @@ public class BackgroundService extends Service {
     public void onCreate() {
         AppLogUtils.e("onCreate");
 //        initData();
-        Looper looper = getMainLooper(); // 获取主线程的Looper对象
-        if (mHandler == null) {
-            mHandler = new Handler(looper); // 与主线程的Looper关联
-        }
 
-        mHandler.post(new Runnable() {
+        getmHandler().post(new Runnable() {
             @Override
             public void run() {
                 ToastUtils.showLongToast("HHOMC服务启动");
@@ -307,7 +309,6 @@ public class BackgroundService extends Service {
 
 
         NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
             /**
              * Oreo不用Priority了,用importance
@@ -360,11 +361,7 @@ public class BackgroundService extends Service {
         AppLogUtils.i("onStartCommand");
 
 
-        Looper looper = getMainLooper(); // 获取主线程的Looper对象
-        if (mHandler == null) {
-            mHandler = new Handler(looper); // 与主线程的Looper关联
-        }
-
+         getmHandler();
         if (isFiring < 1) {
             isFiring++;
             AppLogUtils.e("服务 - 首次");
@@ -431,7 +428,7 @@ public class BackgroundService extends Service {
 //        localConfig.setApkInfoMapStr("");
 
         String apkInfoMapStr = localConfig.getApkInfoMapStr("");
-        AppLogUtils.e("apkInfoMapStr--" + apkInfoMapStr);
+        AppLogUtils.e(INSTALL_TAG+"apkInfoMapStr--" + apkInfoMapStr);
         if (StringUtils.isNotNull(apkInfoMapStr)) {
 
             // 转换之前保存的本地map
@@ -444,7 +441,7 @@ public class BackgroundService extends Service {
             apkUrlMap.putAll(localHashMap);
 
             if (apkUrlMap.size() == 0) {
-                AppLogUtils.e("map无数据,无安装任务");
+                AppLogUtils.e(INSTALL_TAG+"map无数据,无安装任务");
                 return;
             }
 
@@ -458,18 +455,18 @@ public class BackgroundService extends Service {
 //                        AppLogUtils.e("map-key:" + key);
                         ServerActionAppUpdateRequestBean serverUpdateBean = apkUrlMap.get(key);
                         if (key.equals(appList.get(i).getPackageName())) {
-                            AppLogUtils.e("map循环中,有包名");
+                            AppLogUtils.e(INSTALL_TAG+"map循环中,有包名");
                             // 已有
                             // 并且apk已有
                             File apkFile = new File(getDir(), serverUpdateBean.getFileName());
                             if (apkFile != null && apkFile.exists()) {
-                                AppLogUtils.e("map循环中,有包名,有apk");
-                                AppLogUtils.e("map循环中,有包名,有apk--apkFile.length()---" + apkFile.length());
-                                AppLogUtils.e("map循环中,有包名,有apk--mBean.getFileSize()--" + serverUpdateBean.getFileSize());
+                                AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有apk");
+                                AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有apk--apkFile.length()---" + apkFile.length());
+                                AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有apk--mBean.getFileSize()--" + serverUpdateBean.getFileSize());
                                 if (apkFile.length() == serverUpdateBean.getFileSize()) {
-                                    AppLogUtils.e("map循环中,有包名,有完整的apk");
+                                    AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有完整的apk");
                                     if (appList.get(i).getVersionName().equals(serverUpdateBean.getVersionName())) {
-                                        AppLogUtils.e("map循环中,有包名,有完整的apk,版本号一致,安装成功");
+                                        AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有完整的apk,版本号一致,安装成功");
 
 
                                         ServerActionAppUpdateResultBean resultBean = new ServerActionAppUpdateResultBean();
@@ -486,22 +483,22 @@ public class BackgroundService extends Service {
                                             initSockect(websocketUrl);
                                         }
                                         String resultStr = gson.toJson(resultBean);
-                                        AppLogUtils.e("根据本地保存的map--安装成功---发送apk安装升级消息--resultStr: " + resultStr);
+                                        AppLogUtils.e(INSTALL_TAG+"根据本地保存的map--安装成功---发送apk安装升级消息--resultStr: " + resultStr);
 
                                         sendMessageByWebSocket(resultStr);
 
                                         pauseTaskAndDelete(serverUpdateBean);
                                     } else {
-                                        AppLogUtils.e("map循环中,有包名,有完整的apk,开始安装");
+                                        AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有完整的apk,开始安装");
                                         startDownloadApk(serverUpdateBean);
                                     }
                                 } else {
-                                    AppLogUtils.e("map循环中,有包名,不是完整的apk,接着下载");
+                                    AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,不是完整的apk,接着下载");
                                     startDownloadApk(serverUpdateBean);
                                 }
 
                             } else {
-                                AppLogUtils.e("map循环中,有包名,没有apk,开始下载");
+                                AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,没有apk,开始下载");
                                 startDownloadApk(serverUpdateBean);
                             }
                         }
@@ -512,19 +509,19 @@ public class BackgroundService extends Service {
                 if (k == apkUrlMap.size()) {
                     // map循环完了,还没有
                     // 下载
-                    AppLogUtils.e("map循环完了,还没有,下载");
+                    AppLogUtils.e(INSTALL_TAG+"map循环完了,还没有,下载");
 //                    startDownloadApk(localHashMap.get(0));
 
                     Iterator<HashMap.Entry<String, ServerActionAppUpdateRequestBean>> iterator = localHashMap.entrySet().iterator();
                     if (iterator.hasNext()) {
                         HashMap.Entry<String, ServerActionAppUpdateRequestBean> entry = iterator.next();
-                        AppLogUtils.e("第一个值为:" + entry.getValue().toString());
+                        AppLogUtils.e(INSTALL_TAG+"第一个值为:" + entry.getValue().toString());
 //                        System.out.println("第一个值为:" + entry.getValue());
                         startDownloadApk(entry.getValue());
                     }
 
                 } else {
-                    AppLogUtils.e("map中有,不下载");
+                    AppLogUtils.e(INSTALL_TAG+"map中有,不下载");
 
                     // 情况:静默下载,新应用(之前没有安装过)
                     for (String key : apkUrlMap.keySet()) {
@@ -738,7 +735,8 @@ public class BackgroundService extends Service {
 //            if (heartBeatRunnable != null) {
 //                mHandler.removeCallbacks(heartBeatRunnable);
 //            }
-            mHandler.postDelayed(heartBeatRunnable, 5 * 1000);//开启心跳检测
+            getmHandler().sendEmptyMessageDelayed(WHAT_HEART,5 * 1000);//开启心跳检测
+
 
 //            mHandler.post(new Runnable() {
 //                @Override
@@ -763,7 +761,7 @@ public class BackgroundService extends Service {
         ServerActionAppUpdateRequestBean serverUpdateBean = apkUrlMap.get(packageNameServer);
 
         if (apkUrlMap.size() == 0) {
-            AppLogUtils.e("apkUrlMap无数据");
+            AppLogUtils.e(INSTALL_TAG+"apkUrlMap无数据");
             return;
         }
 
@@ -793,14 +791,14 @@ public class BackgroundService extends Service {
                     // 4:安装成功
                     resultBean.setStatus(4);
                     String resultStr = gson.toJson(resultBean);
-                    AppLogUtils.e("主动查询设备业务--安装成功---发送apk安装升级消息--resultStr: " + resultStr);
+                    AppLogUtils.e(INSTALL_TAG+"主动查询设备业务--安装成功---发送apk安装升级消息--resultStr: " + resultStr);
                     sendMessageByWebSocket(resultStr);
 
                 } else {
                     // 5:安装失败
                     resultBean.setStatus(5);
                     String resultStr = gson.toJson(resultBean);
-                    AppLogUtils.e("主动查询设备业务--安装失败---发送apk安装升级消息--resultStr: " + resultStr);
+                    AppLogUtils.e(INSTALL_TAG+"主动查询设备业务--安装失败---发送apk安装升级消息--resultStr: " + resultStr);
                     sendMessageByWebSocket(resultStr);
 
                 }
@@ -850,32 +848,32 @@ public class BackgroundService extends Service {
         lastServerUpdateBean = mBean;
 
         // 会有同一个下载url多次发送消息过来的情况,故判断是否已有下载
-        AppLogUtils.e("apkUrlMap.size()--" + apkUrlMap.size());
+        AppLogUtils.e(INSTALL_TAG+"apkUrlMap.size()--" + apkUrlMap.size());
         if (apkUrlMap.size() > 0) {
             int k = 0;
             boolean canInstall = false;
             // 循环apkUrlMap
             for (String key : apkUrlMap.keySet()) {
-                AppLogUtils.e("map-key:" + key);
+                AppLogUtils.e(INSTALL_TAG+"map-key:" + key);
                 if (key.equals(mBean.getPackageName())) {
-                    AppLogUtils.e("map循环中,有包名");
+                    AppLogUtils.e(INSTALL_TAG+"map循环中,有包名");
                     // 已有
                     // 并且apk已有
                     File apkFile = new File(getDir(), mBean.getFileName());
                     if (apkFile != null && apkFile.exists()) {
-                        AppLogUtils.e("map循环中,有包名,有apk");
-                        AppLogUtils.e("map循环中,有包名,有apk--apkFile.length()---" + apkFile.length());
-                        AppLogUtils.e("map循环中,有包名,有apk--mBean.getFileSize()--" + mBean.getFileSize());
+                        AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有apk");
+                        AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有apk--apkFile.length()---" + apkFile.length());
+                        AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有apk--mBean.getFileSize()--" + mBean.getFileSize());
                         if (apkFile.length() == mBean.getFileSize()) {
-                            AppLogUtils.e("map循环中,有包名,有完整的apk");
+                            AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,有完整的apk");
                             canInstall = true;
                             break;
                         } else {
-                            AppLogUtils.e("map循环中,有包名,不是完整的apk");
+                            AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,不是完整的apk");
                         }
 
                     } else {
-                        AppLogUtils.e("map循环中,有包名,没有apk");
+                        AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,没有apk");
                     }
                 }
                 k++;
@@ -883,10 +881,10 @@ public class BackgroundService extends Service {
             if (k == apkUrlMap.size()) {
                 // map循环完了,还没有
                 // 下载
-                AppLogUtils.e("map循环完了,还没有,下载");
+                AppLogUtils.e(INSTALL_TAG+"map循环完了,还没有,下载");
                 startDownloadApk(mBean);
             } else {
-                AppLogUtils.e("map中有,不下载");
+                AppLogUtils.e(INSTALL_TAG+"map中有,不下载");
             }
 
             if (canInstall) {
@@ -896,7 +894,7 @@ public class BackgroundService extends Service {
 
         } else {
             // 没有map,直接下载
-            AppLogUtils.e("没有map,直接下载");
+            AppLogUtils.e(INSTALL_TAG+"没有map,直接下载");
             startDownloadApk(mBean);
         }
     }
@@ -1043,6 +1041,7 @@ public class BackgroundService extends Service {
         }
 
         try {
+            AppLogUtils.e("sendMessage-----: "+message);
             mWebSocketClient.send(message);
         } catch (NotYetConnectedException e) {
 
@@ -1051,6 +1050,7 @@ public class BackgroundService extends Service {
             mHandler.postDelayed(new Runnable() {
                 @Override
                 public void run() {
+                    AppLogUtils.e("sendMessage-----: "+message);
                     mWebSocketClient.send(message);
                 }
             }, 2 * 1000); //延时执行run内代码
@@ -1065,7 +1065,7 @@ public class BackgroundService extends Service {
 
 
     private void restartWebsocket() {
-        mHandler.removeCallbacks(heartBeatRunnable);
+        getmHandler().removeMessages(WHAT_HEART);
         if (mWebSocketClient != null) {
             mWebSocketClient.close();//取消掉以前的长连接
             mWebSocketClient = null;
@@ -1088,33 +1088,52 @@ public class BackgroundService extends Service {
     // 定时任务,发送心跳包
     private Handler mHandler;
 
-    private Runnable heartBeatRunnable = new Runnable() {
-        @Override
-        public void run() {
-            AppLogUtils.e("开始发送心跳包检测-------------");
-            if (System.currentTimeMillis() - sendTime >= TIME_HEARTBEAT) {
-                if (mWebSocketClient != null) {
-                    if (!isWebsocketConnect) {//长连接已断开,
-                        AppLogUtils.e("发送心跳包-------------长连接已断开");
-                        restartWebsocket();
-                    } else {//长连接处于连接状态---
-                        AppLogUtils.e("发送心跳包-------------长连接处于连接状态");
-                        // 上报设备状态
-                        uploadDeviceStatus();
-                    }
-                } else {
-                    AppLogUtils.e("开始发送心跳包检测-----mWebSocketClient = null------restartWebsocket");
-                    restartWebsocket();
+    public Handler getmHandler() {
+        if(mHandler==null){
+            synchronized (BackgroundService.class){
+                if(mHandler==null){
+                    mHandler=new Handler(Looper.getMainLooper()){
+                        @Override
+                        public void handleMessage(@NonNull Message msg) {
+                            super.handleMessage(msg);
+                            if(msg.what==WHAT_HEART){
+                                heartBeat();
+                            }
+                            if(msg.what==WHAT_ANSTALL){
+                                apkInstallPolling();
+                            }
+                        }
+                    };
                 }
-
-                sendTime = System.currentTimeMillis();
             }
+        }
+        return mHandler;
+    }
 
-            mHandler.postDelayed(heartBeatRunnable, TIME_HEARTBEAT);//每隔一定的时间,对长连接进行一次心跳检测
 
-//            AlarmManagerUtils.getInstance(getApplicationContext()).getUpAlarmManagerWorkOnOthers(TIME_HEARTBEAT);
+    private void heartBeat(){
+        AppLogUtils.e("开始发送心跳包检测-------------");
+        if (System.currentTimeMillis() - sendTime >= TIME_HEARTBEAT) {
+            if (mWebSocketClient != null) {
+                if (!isWebsocketConnect) {//长连接已断开,
+                    AppLogUtils.e("发送心跳包-------------长连接已断开");
+                    restartWebsocket();
+                } else {//长连接处于连接状态---
+                    AppLogUtils.e("发送心跳包-------------长连接处于连接状态");
+                    // 上报设备状态
+                    uploadDeviceStatus();
+                }
+            } else {
+                AppLogUtils.e("开始发送心跳包检测-----mWebSocketClient = null------restartWebsocket");
+                restartWebsocket();
+            }
+
+            sendTime = System.currentTimeMillis();
         }
-    };
+
+        getmHandler().sendEmptyMessageDelayed(WHAT_HEART,TIME_HEARTBEAT); //每隔一定的时间,对长连接进行一次心跳检测
+
+    }
 
 
     String apkSender;
@@ -1127,11 +1146,14 @@ public class BackgroundService extends Service {
     int upgradeType;
 
     private void startDownloadApk(ServerActionAppUpdateRequestBean mBean) {
-        AppLogUtils.e("startDownloadApk---------");
-
+        AppLogUtils.e(INSTALL_TAG+"startDownloadApk---------");
 
+        if(mBean==null){
+            AppLogUtils.e(INSTALL_TAG+"startDownloadApk serverUpdateBean == null");
+            return;
+        }
         String apkUrl = mBean.getFilePath();
-        AppLogUtils.e("apkUrl = " + apkUrl);
+        AppLogUtils.e(INSTALL_TAG+"apkUrl = " + apkUrl);
 //        apkUrl = testurl;
 
 //        String apkName = apkUrl.substring(apkUrl.lastIndexOf("/") + 1);
@@ -1143,12 +1165,12 @@ public class BackgroundService extends Service {
         // 根据文件名创建对应文件
         apkFile = new File(getDir(), apkFileName);
 
-        AppLogUtils.e("apkFile---" + apkFile.getAbsolutePath());
+        AppLogUtils.e(INSTALL_TAG+"apkFile---" + apkFile.getAbsolutePath());
 
         apkTaskId = mBean.getTaskId();
         apkSender = mBean.getSender();
         upgradeType = mBean.getUpgradeType();
-        AppLogUtils.e("升级方式upgradeType---" + upgradeType);
+        AppLogUtils.e(INSTALL_TAG+"升级方式upgradeType---" + upgradeType);
 
         mDownloadHelper.addTask(apkUrl, apkFile, FIRST_ACTION).submit(MyApplication.getContext());
 
@@ -1171,21 +1193,25 @@ public class BackgroundService extends Service {
     // 开始安装
     private void startInstallApk() {
 //        AppLogUtils.e("startInstallApk--开始安装,filePath=" + filePath);
+        AppLogUtils.e(INSTALL_TAG+"startInstallApk--开始安装,apkFile=" + apkFile.getName());
         getiDeviceUI().silenceInstall(apkFile.getAbsolutePath(), new SilenceInstallSuccessListener() {
             @Override
             public void success(boolean isSucceeded) {
                 if(!isSucceeded){
                     defaultInstallApp() ;
+                }else {
+                    getmHandler().removeMessages(WHAT_ANSTALL);
+                    getmHandler().sendEmptyMessageDelayed(WHAT_ANSTALL, TIME_INSTALL_INTERVAL);//开启定时任务
+                    apkInstallTime = System.currentTimeMillis();
                 }
             }
         });
     }
 
     private void defaultInstallApp(){
-        AppLogUtils.e("startInstallApk--开始安装,apkFile=" + apkFile.getName());
-
-        mHandler.postDelayed(apkInstallRunnable, TIME_INSTALL_INTERVAL);//开启定时任务
-        AppLogUtils.e("startInstallApk--开始安装,启动定时检测任务");
+        getmHandler().removeMessages(WHAT_ANSTALL);
+        getmHandler().sendEmptyMessageDelayed(WHAT_ANSTALL, TIME_INSTALL_INTERVAL);//开启定时任务
+        AppLogUtils.e(INSTALL_TAG+"startInstallApk--开始安装,启动定时检测任务");
         apkInstallTime = System.currentTimeMillis();
 
         Intent intent = new Intent(Intent.ACTION_VIEW);
@@ -1385,20 +1411,18 @@ public class BackgroundService extends Service {
 
     private long apkInstallTime = 0L;
     // 定时任务,是否安装成功的循环
-    private Runnable apkInstallRunnable = new Runnable() {
-        @Override
-        public void run() {
-            AppLogUtils.e("开始apkInstallRunnable检测-------------");
+    private void apkInstallPolling(){
+        AppLogUtils.e("开始apkInstallRunnable检测-------------");
 //            AppLogUtils.e("开始apkInstallRunnable检测-------System.currentTimeMillis() =" + System.currentTimeMillis());
 //            AppLogUtils.e("开始apkInstallRunnable检测-------apkInstallTime =" + apkInstallTime);
 //            AppLogUtils.e("开始apkInstallRunnable检测-------相减 =" + (System.currentTimeMillis() - apkInstallTime));
 
-            if (System.currentTimeMillis() - apkInstallTime >= TIME_INSTALL_ALL) {
-                // 现在时间-开始安装时间,超过了安装总时长,算安装失败
+        if (System.currentTimeMillis() - apkInstallTime >= TIME_INSTALL_ALL) {
+            // 现在时间-开始安装时间,超过了安装总时长,算安装失败
 //                AppLogUtils.e("超过了安装总时长");
-                AppLogUtils.e("超过了安装总时长,主动查询服务器");
+            AppLogUtils.e("超过了安装总时长,主动查询服务器");
 
-                queryServerAppInfo();
+            queryServerAppInfo();
 
 
 //                ArrayList<AppInfoBean> appList = AppUtils.getAppList(MyApplication.getContext());
@@ -1441,63 +1465,66 @@ public class BackgroundService extends Service {
 //                }
 
 
-            } else {
+        } else {
 
 
-                ArrayList<AppInfoBean> appList = AppUtils.getAppList(MyApplication.getContext());
+            ArrayList<AppInfoBean> appList = AppUtils.getAppList(MyApplication.getContext());
 
-                if (appList != null && appList.size() > 0) {
-                    // 循环apkUrlMap
-                    for (int i = 0; i < appList.size(); i++) {
-                        for (String key : apkUrlMap.keySet()) {
+            if (appList != null && appList.size() > 0) {
+                // 循环apkUrlMap
+                for (int i = 0; i < appList.size(); i++) {
+                    for (String key : apkUrlMap.keySet()) {
 //                        AppLogUtils.e("map-key:" + key);
-                            ServerActionAppUpdateRequestBean serverUpdateBean = apkUrlMap.get(key);
-
-                            AppInfoBean appInfoBean = appList.get(i);
+                        ServerActionAppUpdateRequestBean serverUpdateBean = apkUrlMap.get(key);
 
-                            if (key.equals(appInfoBean.getPackageName())) {
-                                AppLogUtils.e("map循环中,有包名");
-                                // 已有
-                                if (appInfoBean.getVersionName().equals(serverUpdateBean.getVersionName())) {
-                                    // 相等就是安装成功
-                                    AppLogUtils.e("map循环中,有包名,版本号一致");
-                                    // 安装成功与否发送给服务端的消息
-                                    ServerActionAppUpdateResultBean resultBean = new ServerActionAppUpdateResultBean();
-                                    resultBean.setSource("app");
-                                    resultBean.setSn(DeviceUtils.getDeviceSN());
-                                    resultBean.setOp(UPGRADE_PROCESSING);
-                                    resultBean.setTaskId(serverUpdateBean.getTaskId());
-                                    resultBean.setDownloadPercent(100);
-                                    resultBean.setSender(serverUpdateBean.getSender());
-
-                                    if (mWebSocketClient == null) {
-                                        initSockect(websocketUrl);
-                                    }
+                        AppInfoBean appInfoBean = appList.get(i);
 
-                                    // 4:安装成功
-                                    resultBean.setStatus(4);
-                                    String resultStr = gson.toJson(resultBean);
-                                    AppLogUtils.e("定时任务--安装成功---发送apk安装升级消息--resultStr: " + resultStr);
+                        if (key.equals(appInfoBean.getPackageName())) {
+                            AppLogUtils.e(INSTALL_TAG+"map循环中,有包名");
+                            // 已有
+                            if (appInfoBean.getVersionName().equals(serverUpdateBean.getVersionName())) {
+                                // 相等就是安装成功
+                                AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,版本号一致");
+                                // 安装成功与否发送给服务端的消息
+                                ServerActionAppUpdateResultBean resultBean = new ServerActionAppUpdateResultBean();
+                                resultBean.setSource("app");
+                                resultBean.setSn(DeviceUtils.getDeviceSN());
+                                resultBean.setOp(UPGRADE_PROCESSING);
+                                resultBean.setTaskId(serverUpdateBean.getTaskId());
+                                resultBean.setDownloadPercent(100);
+                                resultBean.setSender(serverUpdateBean.getSender());
 
-                                    sendMessageByWebSocket(resultStr);
+                                if (mWebSocketClient == null) {
+                                    initSockect(websocketUrl);
+                                }
 
-                                    pauseTaskAndDelete(serverUpdateBean);
+                                // 4:安装成功
+                                resultBean.setStatus(4);
+                                String resultStr = gson.toJson(resultBean);
+                                AppLogUtils.e(INSTALL_TAG+"定时任务--安装成功---发送apk安装升级消息--resultStr: " + resultStr);
+                                getmHandler().removeMessages(WHAT_ANSTALL);
+                                sendMessageByWebSocket(resultStr);
 
-                                } else {
-                                    AppLogUtils.e("map循环中,有包名,但版本号还不一致");
-                                }
+                                pauseTaskAndDelete(serverUpdateBean);
 
+                            } else {
+                                AppLogUtils.e(INSTALL_TAG+"map循环中,有包名,但版本号还不一致");
                             }
+
                         }
                     }
-
                 }
 
+            }
 
-                mHandler.postDelayed(this, TIME_INSTALL_INTERVAL); //每隔一定的时间,进行一次检测
+            if(apkUrlMap!=null&&apkUrlMap.size()>0) {
+                getmHandler().sendEmptyMessageDelayed(WHAT_ANSTALL, TIME_INSTALL_INTERVAL); //每隔一定的时间,进行一次检测
+            }else{
+                getmHandler().removeMessages(WHAT_ANSTALL);
             }
         }
-    };
+    }
+
 
 
     // ----------aidl 消息互通-----------
@@ -1648,15 +1675,19 @@ public class BackgroundService extends Service {
     };
 
     private void pauseTaskAndDelete(ServerActionAppUpdateRequestBean serverUpdateBean) {
-        // 停止下载任务
-        mDownloadHelper.pauseTask(serverUpdateBean.getFilePath(), apkFile, FIRST_ACTION).submit(MyApplication.getContext());
-        // 删除对应文件
-        apkFile = new File(getDir(), serverUpdateBean.getFileName());
-        if (apkFile != null && apkFile.exists()) {
-            AppLogUtils.e("有对应文件,删除");
-            apkFile.delete();
-        } else {
-            AppLogUtils.e("无对应文件");
+        if(serverUpdateBean!=null) {
+            // 停止下载任务
+            mDownloadHelper.pauseTask(serverUpdateBean.getFilePath(), apkFile, FIRST_ACTION).submit(MyApplication.getContext());
+            // 删除对应文件
+            apkFile = new File(getDir(), serverUpdateBean.getFileName());
+            if (apkFile != null && apkFile.exists()) {
+                AppLogUtils.e("有对应文件,删除");
+                apkFile.delete();
+            } else {
+                AppLogUtils.e("无对应文件");
+            }
+        }else{
+            AppLogUtils.e(INSTALL_TAG+"pauseTaskAndDelete serverUpdateBean == null");
         }
         // map移除该key-value
         Iterator<String> iterator = apkUrlMap.keySet().iterator();
@@ -1676,9 +1707,7 @@ public class BackgroundService extends Service {
         AppLogUtils.e("newApkUrlMap--get--" + apkInfoMapStr);
 
         // 移除定时任务
-        if (apkInstallRunnable != null) {
-            mHandler.removeCallbacks(apkInstallRunnable);
-        }
+        getmHandler().removeMessages(WHAT_ANSTALL);
         AppLogUtils.e("移除定时任务");
 
     }