亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android常見bug有哪些

發布時間:2021-03-24 13:39:02 來源:億速云 閱讀:360 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關Android常見bug有哪些的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

1、關于使用OkHttp運行時出現的錯誤

報錯如下:

Static interface methods are only supported starting with Android N (--min-api 24): 
okhttp3.Request okhttp3.Authenticator.lambda$static$0(okhttp3.Route, okhttp3.Response)

大概意思就是靜態接口方法只從Android N開始使用。

解決方案:

因為靜態接口需要在Java 8 下才支持使用,所以我們要使用靜態接口,就需要在app的build.gradle文件中配置聲明,使用Java 8編譯。

所以需要加入以下代碼來聲明:

 compileOptions {

  sourceCompatibility JavaVersion.VERSION_1_8

  targetCompatibility JavaVersion.VERSION_1_8

 }

修改如下圖所示:

Android常見bug有哪些

添加完成以后,同步一下,然后重新運行項目就可以啦。

2、圖片輪播控件com.youth.banner使用Glide異步加載圖片時發生的崩潰

錯誤信息:

java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
 at com.b.a.e.m.b(RequestManagerRetriever.java:311)
 at com.b.a.e.m.a(RequestManagerRetriever.java:130)
 at com.b.a.e.m.a(RequestManagerRetriever.java:114)
 at com.b.a.d.c(Glide.java:697)
    at com.company.h6.c.ag$b.a(MainFragment.java:1079)
 at com.company.h6.c.ag$b.displayImage(MainFragment.java:1063)
 at com.youth.banner.Banner.setImageList(Banner.java:354)
    at com.youth.banner.Banner.start(Banner.java:262)

根據錯誤信息找到發生閃退的代碼位置:

 //自定義的圖片加載器
 private class ImgLoader extends ImageLoader {
  @Override
  public void displayImage(Context context, Object path, ImageView imageView) {  
  RoundedCorners roundedCorners = new RoundedCorners(20);
   RequestOptions options = new RequestOptions().bitmapTransform(roundedCorners);
   //報錯地方
   Glide.with(context).load((String) path).apply(options).into(imageView);
  }
    }

跟蹤日志進入Glide調用的地方發現,出現在

RequestManagerRetriever.assertNotDestroyed()

方法中:

 @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
 private static void assertNotDestroyed(Activity activity) {
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed()) {
   throw new IllegalArgumentException("You cannot start a load for a destroyed activity");
  }
    }

這個錯誤是使用Glide異步加載圖片的時候,Activity已經Destroyed

解決方案:

1、在使用Glide加載圖片前,先進行Activity是否Destroy的判斷:

 /**
  * 判斷Activity是否Destroy
  * @param activity
  * @return
  */
 public static boolean isDestroy(Activity mActivity) {
  if (mActivity== null || mActivity.isFinishing() || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && mActivity.isDestroyed())) {
   return true;
  } else {
   return false;
  }
    }

2、在錯誤的位置進行替換:

 //自定義的圖片加載器
 private class ImgLoader extends ImageLoader {
  @Override
  public void displayImage(Context context, Object path, ImageView imageView) { 
   //添加判斷 
   if(!isDestroy((Activity)context)){
    RoundedCorners roundedCorners = new RoundedCorners(20);
    RequestOptions options = new RequestOptions().bitmapTransform(roundedCorners);
    Glide.with(context).load((String) path).apply(options).into(imageView);
   }
  }
    }

這樣就解決啦。

3、接入容聯七陌客服系統,進入客服界面時閃退問題

錯誤信息:

Android常見bug有哪些

圖片看起來不清晰,看報錯代碼:

java.lang.NoSuchMethodError: No virtual method into (Landroid/widget/ImageView;)Lcom/bumptech/glide/request/target/Target; in class Lcom/a/a/i; or its super classes (declaration of 'com.a.a.i' appears in/data/app/com.sami91sami.h6-1/base.apk)

我們可以根據報錯,跳到報錯的地方:

Android常見bug有哪些

該報錯的意思就是:沒有 

into(Landroid/widget/ImageView)

的方法,代碼能編譯通過,說明項目中肯定是添加依賴了,那怎么還會報這個錯誤呢?還沒添加依賴之前,項目中也是使用的Glide進行圖片的加載,會不會是項目中的Glide與容聯Demo中的Glide有沖突呢。

我們可以根據報錯的地方into方法,點進入看源碼:

Android常見bug有哪些

可以看到容聯Demo使用的Glide版本是3.7.0。

再來看看項目中Glide使用的版本:

Android常見bug有哪些

可以看到項目中使用的Glide版本是4.5.0。

這時就想到真的很大概率是兩者的Glide版本有沖突了。

果然將容聯Demo中的Glide版本改成4.5.0之后,編譯運行進入客服界面后,沒有報錯了,完美解決。

4、android 7.0系統解決拍照的問題

報錯信息:

# main(1)
android.os.FileUriExposedException
file:///storage/emulated/0/xiangmu/3462884.jpg exposed beyond app through ClipData.Item.getUri()

android.os.StrictMode.onFileUriExposed(StrictMode.java:1816)
android.net.Uri.checkFileUriExposed(Uri.java:2350)

解決方法如下:

1.在相對應的頁面中,寫如下的方法:

private void initPhotoError(){
  // android 7.0系統解決拍照的問題
  StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
  StrictMode.setVmPolicy(builder.build());
  builder.detectFileUriExposure();
    }

2.在onCreate中調用上述的方法。

5、使用RecyclerView滑動閃退問題

錯誤信息:

Android常見bug有哪些

圖片看起來不清晰,看報錯代碼:

IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter

看這個代碼,只是并沒有報到我們自己的代碼里面來,在底層就崩潰了,在app層面并沒有,彈出一個框,說應用程序已奔潰,而是直接就沒了,用戶感覺很奇怪。這種異常并不是很容易出現,而是偶爾出現,我的也是在后臺奔潰日志中,發現了這種異常,我們自己都不知道什么地方報錯的。

解決方案如下:

1、創建一個類LinearLayoutManagerWrapper

繼承LinearLayoutManager,重寫onLayoutChildren方法

public class WrapContentLinearLayoutManager extends LinearLayoutManager {
 public WrapContentLinearLayoutManager(Context context) {
  super(context); 
 } 

 public WrapContentLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { 
  super(context, orientation, reverseLayout); 
 } 

 public WrapContentLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
  super(context, attrs, defStyleAttr, defStyleRes); 
 } 

 @Override 
 public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
  try { 
   super.onLayoutChildren(recycler, state); 
  } catch (IndexOutOfBoundsException e) { 
   e.printStackTrace(); 
  } 
 } 
}

2、設置RecyclerView的布局管理為

WrapContentLinearLayoutManager對象

mRecyclerView.setLayoutManager(new WrapContentLinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));

其實這也不是什么解決方案,只是把這個異常捕獲了,不讓他奔潰了,這個問題的終極解決方案還是得讓google去修復。

感謝各位的閱讀!關于“Android常見bug有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武穴市| 伽师县| 康乐县| 西和县| 汉中市| 甘孜| 兴文县| 安乡县| 松滋市| 大港区| 马尔康县| 阳信县| 云南省| 穆棱市| 松潘县| 武邑县| 松溪县| 岚皋县| 达尔| 藁城市| 丰宁| 怀安县| 乌兰浩特市| 高州市| 湾仔区| 和平区| 贡嘎县| 乌鲁木齐市| 博客| 屏东市| 镇坪县| 白玉县| 宿州市| 桐庐县| 阿克苏市| 巧家县| 太仓市| 龙胜| 淮安市| 宁南县| 巴彦淖尔市|