遇到一个问题弄得我这个新手焦头烂额。
                app使用的是LoonAndroid.jar 的包开发的app版本自动更新,
                但是在某些机型(一般在Android6.0以上发生)例如荣耀V9上面会发生“下载失败”的问题,如图
                
代码如下: /**
     * 检查更新接口
     *
     * @param context
     */
    private void ajaxWebSelectVersion(Context context, int key, String USR_ID) {        //LinkedHashMap
        LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>();        //        //加密得到密文
        String platform = DESUtils.desEncryption("1");
        linkedHashMap.put(Constants.Params.USR_ID, DESUtils.desEncryption(USR_ID));
        linkedHashMap.put(Constants.Params.PLATFORM, platform);        //InternetConfig
        InternetConfig internetConfig = new InternetConfig();
        internetConfig.setKey(key);
        internetConfig.setTimeout(Constants.InternetConfig.TIME_OUT10);
        internetConfig.setHttps(true);        //ajaxWebServer
        FastHttpHander.ajaxWebServer(Constants.URL.COMM_WEB_SERVICE_URL, Constants.CommWebServiceMethod.SELECT_VERSION, linkedHashMap, internetConfig, this);
    }    /**
     * 注解 loonandroid请求返回
     *
     * @param responseEntity
     */
    @InjectHttp
    private void injectHttp(ResponseEntity responseEntity) {
        if (null != responseEntity) {
            int status = responseEntity.getStatus();
            if (FastHttp.result_ok == 0) {
                int key = responseEntity.getKey();
                if (key == Constants.InternetConfig.KEY0X01) {//检查更新接口
                    String result = responseEntity.getContentAsString();
                    parsingJsonSelectVersion(this, result);      // TODO: 2017/10/17
                }
            } else if (FastHttp.result_net_err == status) {
                Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
            }
        }
    }    private String URL;
    private Double VERSIONNUM;    /**
     * 解析JSON数据>>>检查更新接口
     *
     * @param context
     * @param result
     */
    private void parsingJsonSelectVersion(Context context, String result) {
        try {
            JSONArray jsonArray = new JSONArray(result);            int l = jsonArray.length();
            if (l > 0) {
                JSONObject jsonObjectContent = jsonArray.optJSONObject(0);
                String PLATFORM = jsonObjectContent.optString("PLATFORM");//平台
                VERSIONNUM = jsonObjectContent.optDouble("VERSIONNUM");//版本号
                //                int versioncode = Utils.getAppVersioncode(SplashActivity.this);
                double versioncode = Utils.getAppVersioncode(MainActivity.this);
                URL = jsonObjectContent.optString("URL").trim();//新版本下载URL
                //                if (false&&versioncode != -1 && !TextUtils.isEmpty(URL)) {//调检查版本接口成功
                if (versioncode != -1 && !TextUtils.isEmpty(URL)) {//调检查版本接口成功
                    if (VERSIONNUM <= versioncode) {//没有新版本,正常进入应用
                        Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
                    } else {//有新版本
                        showUpdateDialog(VERSIONNUM);
                    }
                } else {//检查更新失败,正常进入应用
                    Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
                }
            } else {
                Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
                //                ToastUtils.show(context, R.string.network_busy_please_try_again_later);
            }
        } catch (JSONException e) {
            Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
            e.printStackTrace();
            //            ToastUtils.show(context, R.string.network_busy_please_try_again_later);
        }
    }
    private OneBtnDialog oneBtnDialog;
    private void showUpdateDialog(Double VERSIONNUM) {//弹出更新对话框,提示更新,点更新下载新安装包
        oneBtnDialog = new OneBtnDialog(this);//底部有一个操作按钮的通用对话框
        oneBtnDialog.setCancelable(false);
        oneBtnDialog.setTitle("");//提示
        oneBtnDialog.setTitleTextColor(R.color.c_24);//标题颜色
        oneBtnDialog.setContent("新版本"+VERSIONNUM);//新版本
        oneBtnDialog.setContentTextColor(R.color.c_24);//内容颜色
        oneBtnDialog.setBtnText(R.string.update);//按钮文本》更新
        oneBtnDialog.setBtnTextColor(R.color.c_d9c08a);//按钮文本颜色
        //oneBtnDialog.setBtnTextColor(R.color.c_d9c08a);//右侧按钮文本颜色
        oneBtnDialog.setBtnOnClickListener(this);//左侧按钮点击事件
        oneBtnDialog.show();
    }    @Override
    public void onClick(View view) {
        //            下载apk
        //                URL = "http://dldir1.qq.com/weixin/android/weixin6315android760.apk";
        //判断文件目录是否存在,不存在多级目录分别创建之
        String cacheFolder = Constants.UserCache.CACHE_FOLDER;
        File file0 = new File(cacheFolder);
        if (!file0.exists()) {//检查图片存放的文件夹是否存在
            file0.mkdirs();//不存在的话 创建文件夹s
        }
        NotfiEntity notfiEntity = new NotfiEntity();
        notfiEntity.setLayout_id(R.layout.nf_update_layout);
        notfiEntity.setIcon_id(R.id.iv);
        notfiEntity.setProgress_id(R.id.pb);
        //                notfiEntity.setProgress_txt_id(R.id.tv);
        //                notfiEntity.setClazz(SplashActivity.class);        String fileName = cacheFolder + File.separator + "zxtx_" + TimeUtils.getTime(System.currentTimeMillis(), TimeUtils.DEFAULT_DATE_FORMAT) + ".apk";
        FileLoaderManager.downloadUpdate(URL, fileName, 3, notfiEntity);
        oneBtnDialog.dismiss();
        finish();    }然后我在网络平台上面找了一个荣耀v9测试,得到的日志报错如下:
ERROR15:11:30.77630066WindowManager at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
ERROR15:11:30.77630066WindowManager at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
ERROR15:11:30.77630066WindowManager at java.lang.reflect.Method.invoke(Native Method)
ERROR15:11:30.77630066WindowManager at android.app.ActivityThread.main(ActivityThread.java:5422)
ERROR15:11:30.77630066WindowManager at android.os.Looper.loop(Looper.java:148)
ERROR15:11:30.77630066WindowManager at android.os.Handler.dispatchMessage(Handler.java:102)
ERROR15:11:30.77630066WindowManager at com.android.pc.ioc.internet.FastHttp$AjaxTask$1.handleMessage(FastHttp.java:1129)
ERROR15:11:30.77630066WindowManager at com.android.pc.ioc.internet.FastHttpHander$4.callBack(FastHttpHander.java:406)
ERROR15:11:30.77630066WindowManager at com.android.pc.ioc.internet.FastHttpHander.access$0(FastHttpHander.java:461)
ERROR15:11:30.77630066WindowManager at com.android.pc.ioc.internet.FastHttpHander.http_inject(FastHttpHander.java:484)
ERROR15:11:30.77630066WindowManager at com.android.pc.ioc.invoker.InjectHttps.invoke(InjectHttps.java:25)
ERROR15:11:30.77630066WindowManager at java.lang.reflect.Method.invoke(Native Method)
ERROR15:11:30.77630066WindowManager at mobi.com.myapplication.MainActivity.injectHttp(MainActivity.java:92)
ERROR15:11:30.77630066WindowManager at mobi.com.myapplication.MainActivity.parsingJsonSelectVersion(MainActivity.java:128)
ERROR15:11:30.77630066WindowManager at mobi.com.myapplication.MainActivity.showUpdateDialog(MainActivity.java:156)
ERROR15:11:30.77630066WindowManager at android.app.Dialog.show(Dialog.java:319)
ERROR15:11:30.77630066WindowManager at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
ERROR15:11:30.77630066WindowManager at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:299)
ERROR15:11:30.77630066WindowManager at android.view.ViewRootImpl.<init>(ViewRootImpl.java:372)
ERROR15:11:30.77630066WindowManagerandroid.view.WindowLeaked: Activity mobi.com.myapplication.MainActivity has leaked window com.android.internal.policy.PhoneWindow$DecorView{99e84fc V.E...... R....... 0,0-1152,523} that was originally added here报错信息中的
(MainActivity.java:92)
(MainActivity.java:128)
(MainActivity.java:156)
分别指的是39、73、100行

解决方案 »

  1.   

    去build.gradle里面查看,肯定是一个compileSdkVersion版本太高了(具体哪一个version忘记了),某一个手机不支持,我当时也碰到过,只需要降低编译版本就搞定了
      

  2.   

    不会是在子线程里更新UI显示dialog吧,,,
    runOnUiThread(new Runnable() {
                @Override
                public void run() {
                                int status = responseEntity.getStatus();
                if (FastHttp.result_ok == 0) {
                    int key = responseEntity.getKey();
                    if (key == Constants.InternetConfig.KEY0X01) {//检查更新接口
                        String result = responseEntity.getContentAsString();
                        parsingJsonSelectVersion(this, result);      // TODO: 2017/10/17
                    }
                } else if (FastHttp.result_net_err == status) {
                    Toast.makeText(this,"没有更新",Toast.LENGTH_SHORT).show();
                }
                }
            });