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

2019-11-28  本文已影响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;
                        }
上一篇下一篇

猜你喜欢

热点阅读