美文网首页
2019-11-28 遇到的几个bugly的问题

2019-11-28 遇到的几个bugly的问题

作者: 山上的神仙 | 来源:发表于2019-11-28 11:44 被阅读0次

    这些都是实际项目 上线统计运营遇到的问题,还是有一定的经验。
    第一,避免主线程操作IO 包括SP,其实这个我也没遇到,项目上线才遇到这个问题。而且几率很小。目前只发现在华为机器上。

    第二,服务问题,8.0需要适配,因为对服务进行了限制。其实很多机器上这个没什么关系,但是还是出现问题了,还是记录一下

                   int sdkVersion = Build.VERSION.SDK_INT;
                   if (sdkVersion >= 26) {
                       startForegroundService(new Intent(this, SQLResourcesService.class));
                   } else {
                       startService(new Intent(this, SQLResourcesService.class));
                   }
       //然后在服务onCreate()方法
     if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O){
               NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
               //数字是随便写的“40”,
               nm.createNotificationChannel(new NotificationChannel("40", "App Service", NotificationManager.IMPORTANCE_DEFAULT));
               NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "40");
    
               //其中的2,是也随便写的,正式项目也是随便写
               startForeground(2 ,builder.build());
           }
    

    第三,okhttp复用连接池OOM问题(华为手机特别容易复现 荣耀系列)。

    //最好在构建okhttp的时候自定义一个连接池,因为有可能不会复用的情况 然后没有回收,造成资源浪费。
    //从而 用户很频繁操作 就会造成OOM,ps:okhttp默认是5分钟空闲 不用才会回收。
    .connectTimeout(TimeOut, TimeUnit.SECONDS)
                        .readTimeout(TimeOut, TimeUnit.SECONDS)
                        .writeTimeout(TimeOut, TimeUnit.SECONDS)
                        .connectionPool(new ConnectionPool(5, 5, TimeUnit.SECONDS))
                        .build();
    
    //还有一个,注意创建时候 别直接newBuilder(),要这样去创建。
      private static final int TimeOut = 60;
    
            private static OkHttpClient.Builder builder = null;
    
            private static final OkHttpClient.Builder holderOkHttp() {
                if (builder == null) {
                    builder = new OkHttpClient.Builder();
                    builder.connectTimeout(TimeOut, TimeUnit.SECONDS);//链接超时时间
                    builder.writeTimeout(TimeOut, TimeUnit.SECONDS);//写操作 超时时间
                    builder.readTimeout(TimeOut, TimeUnit.SECONDS);//读操作超时时间
                    builder.addInterceptor(chain -> {
                        Request originalRequest = chain.request();
                        Request.Builder requestBuilder = originalRequest.newBuilder()
                                .addHeader("token", AppConfig.getToken())
                                .addHeader("User-Agent", "android-"
                                        + DeviceUtils.getUniqueDeviceId()
                                        + "-v2." + AppUtils.getAppVersionName()
                                        + "-rom " + RomUtils.getRomInfo());
                        Request request = requestBuilder.build();
                        return chain.proceed(request);
                    });
                    builder.connectionPool(new ConnectionPool(5, 60, TimeUnit.SECONDS));
                }
                return builder;
            }
    

    第四,recyclerView adapter 的问题

    //如果你使用到这个api,一定要记得这样判断一下,不然很可能会数组越界,
     if (holder.getAdapterPosition() == -1) {
                                return;
                            }
    

    相关文章

      网友评论

          本文标题:2019-11-28 遇到的几个bugly的问题

          本文链接:https://www.haomeiwen.com/subject/wwovwctx.html