23毁习、Glide 加載七牛視頻縮略圖問題
1.直接使用Glide 加載的效果蔓彩,圖片按照視頻原來大小顯示
2.在原來視頻 Url 拼接 ?vframe/jpg/offset/1 獲取縮略圖
22碴犬、Activity SingleTask啟動模式
MainActivity 設(shè)置為啟動頁灾茁,并且啟動launchModel=“singleTask”迂尝, 跳轉(zhuǎn)到其他頁面后按 HOME 鍵回到桌面丈钙,再點擊 app 圖標進入,顯示的不是最后一次打開的頁面胸懈,而是 MainActivity 頁面担扑。
原因:SingleTask 表示 activity 棧中只有一個實例,而且 MainActivity 又是啟動頁趣钱,所以點擊 app 圖標進入 app涌献, 相當于重新打開 MainActivity,這時在 MainActivity 上的 activity 會被彈出銷毀首有。
解決:使用一個專門的啟動頁(StartActivity)作為 app 啟動頁燕垃,app 啟動通過 StartActivity 跳轉(zhuǎn)到 MainActivity, 并把 StartActivity 銷毀
<activity android:name=".features.system.StartActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".features.common.MainActivity"
android:configChanges="orientation|screenSize"
android:launchMode="singleTask">
<!--<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>-->
</activity>
21井联、Kotlin 獲取 String 字節(jié)數(shù)
fun String.bytesLength(): Int {
return byteInputStream().available()
}
20卜壕、EditText#setFilters() 限制輸入字節(jié)數(shù)
edittext.addTextChangedListener(new TextWatcherWrapper() {
@Override
public void afterTextChanged(Editable s) {
String string = s.toString().trim();
//限定輸入框最多輸入32個字節(jié)
int inputLength = string.length();
int byteLength = string.getBytes().length;
if (byteLength >= 32) {
edittext.setFilters(new InputFilter[]{new InputFilter.LengthFilter(inputLength)});
} else {
edittext.setFilters(new InputFilter[]{new InputFilter.LengthFilter(32)});
}
edittext.setSelection(edittext.getText().toString().length());
}
});
19、Glide加載原圖OOM
直接使用into(imageView) 加載圖片模糊改為
GlideApp.with(mContext)
.load(item)
.into(new SimpleTarget<Drawable>() {
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
binding.iv.setImageDrawable(resource);
}
});
加載原圖
4.4手機(1280x720)警告OOM:
優(yōu)化前:
優(yōu)化:
GlideApp.with(mContext)
.load(item)
.override(IMAGE_WIDTH)//設(shè)置最大寬度為屏幕寬度
.skipMemoryCache(true)//跳過內(nèi)存緩存
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.into(new SimpleTarget<Drawable>() {
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
binding.iv.setImageDrawable(resource);
}
});
優(yōu)化后:
18低矮、DataBinding 自定義View的屬性
@BindingAdapter({"app:nestedScrollingEnabled"})
public static void setNestedScrollingEnabled(RecyclerView recyclerView, boolean enabled) {
recyclerView.setNestedScrollingEnabled(enabled);
}
在xml中要加 @{} 配合使用印叁,否則提示沒有 app:nestedScrollingEnabled
這個屬性
app:nestedScrollingEnabled="@{false}"
17、靜態(tài)變量
場景:CartUtil中有個isNeedChange靜態(tài)變量军掂,根據(jù)這個變量判斷是否需要刷新購物車。在第一次打開app時可以正常執(zhí)行昨悼,在直接按返回鍵退出在進來就不能正常刷新購物車了蝗锥,原因是CartUtil沒有隨著app退出而銷毀(類沒有被卸載,app退出了率触,進程還在內(nèi)存中终议,沒有被系統(tǒng)殺死),isNeedChange在內(nèi)存中的狀態(tài)還是false葱蝗。解決:1)不用靜態(tài)變量 2)退出app是手動航設(shè)置isNeedChange=true
注意:退出Activity不等共同于退出程序(進程)
16穴张、Kotlin: java.util.NoSuchElementException: Collection contains no element matching the predicate.
list.first({})改list.firstOrNull({})
15、Android8.0 報錯 java.lang.IllegalStateException: Only fullscreen opaque activities can request orientation
只有全屏不透明的activity才能設(shè)置方向
解決:<item name="android:windowIsTranslucent">false</item>
<item name="android:windowDisablePreview">true</item>
14两曼、橫豎屏切換導致activity重走生命周期解決辦法:在清單文件的Activity里配置android:configChanges="orientation|screenSize"
13皂甘、華為榮耀6X:下載的視頻本地無法播放(手機播放器閃退)。文件名:wx_2018-05-29 16:59:13_0.mp4悼凑。原因是手機不支持一些特殊符合:"/:*?<>|" 文件名包存在“:”所以不支持
12偿枕、序列化:把對象轉(zhuǎn)換為字節(jié)序列的過程稱為對象的序列化璧瞬。
反序列化:把字節(jié)序列恢復為對象的過程稱為對象的反序列化。
11渐夸、java kotlin 浮點計算進度丟失問題(101*29.8)嗤锉。使用BigDecimal解決
10、1) 第一次請求權(quán)限時墓塌,用戶拒絕了瘟忱,下一次:shouldShowRequestPermissionRationale() 返回 true,應(yīng)該顯示一些為什么需要這個權(quán)限的說明
2)第二次請求權(quán)限時苫幢,用戶拒絕了酷誓,并選擇了“不在提醒”的選項時:shouldShowRequestPermissionRationale() 返回 false
9、kotlin recycleview adapter 多布局
item 要是可空類型态坦。
否則會報錯java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter item
8盐数、kotlin基礎(chǔ)泛型類,子類不需要泛型的情況
7伞梯、new ArrayList<>(list)
6玫氢、kotlin泛型
out:小的可以賦給大的
class TypedClass<out T>()
val t1 = TypedClass<String>()
val t2: TypedClass<Any> = t1