2019-11-28 遇到的幾個bugly的問題

這些都是實際項目 上線統(tǒng)計運營遇到的問題,還是有一定的經(jīng)驗。
第一,避免主線程操作IO 包括SP,其實這個我也沒遇到,項目上線才遇到這個問題。而且?guī)茁屎苄?。目前只發(fā)現(xiàn)在華為機器上。

第二,服務(wù)問題,8.0需要適配,因為對服務(wù)進行了限制。其實很多機器上這個沒什么關(guān)系,但是還是出現(xiàn)問題了,還是記錄一下

               int sdkVersion = Build.VERSION.SDK_INT;
               if (sdkVersion >= 26) {
                   startForegroundService(new Intent(this, SQLResourcesService.class));
               } else {
                   startService(new Intent(this, SQLResourcesService.class));
               }
   //然后在服務(wù)onCreate()方法
 if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O){
           NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
           //數(shù)字是隨便寫的“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問題(華為手機特別容易復現(xiàn) 榮耀系列)。

//最好在構(gòu)建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();
//還有一個,注意創(chuàng)建時候 別直接newBuilder(),要這樣去創(chuàng)建。
  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,一定要記得這樣判斷一下,不然很可能會數(shù)組越界,
 if (holder.getAdapterPosition() == -1) {
                            return;
                        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容