Android无享商城问题记录

@钟建新

23、Glide 加载七牛视频缩略图问题

1.直接使用Glide 加载的效果,图片按照视频原来大小显示

image.png

2.在原来视频 Url 拼接 ?vframe/jpg/offset/1 获取缩略图

clipboard.png

22、Activity SingleTask启动模式

MainActivity 设置为启动页,并且启动launchModel=“singleTask”, 跳转到其他页面后按 HOME 键回到桌面,再点击 app 图标进入,显示的不是最后一次打开的页面,而是 MainActivity 页面。

原因:SingleTask 表示 activity 栈中只有一个实例,而且 MainActivity 又是启动页,所以点击 app 图标进入 app, 相当于重新打开 MainActivity,这时在 MainActivity 上的 activity 会被弹出销毁。

解决:使用一个专门的启动页(StartActivity)作为 app 启动页,app 启动通过 StartActivity 跳转到 MainActivity, 并把 StartActivity 销毁


















21、Kotlin 获取 String 字节数

fun String.bytesLength(): Int {

return byteInputStream().available()

}

20、EditText#setFilters() 限制输入字节数

edittext.addTextChangedListener(new TextWatcherWrapper() {

@Override

public void afterTextChanged(Editable s) {

String string = s.toString().trim();

//限定输入框最多输入32个字节

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() {

@Override

public void onResourceReady(@NonNull Drawable resource, @Nullable Transition transition) {

binding.iv.setImageDrawable(resource);

}

});

加载原图

4.4手机(1280x720)警告OOM:

image.png

优化前:

image.png

优化:

GlideApp.with(mContext)

.load(item)

.override(IMAGE_WIDTH)//设置最大宽度为屏幕宽度

.skipMemoryCache(true)//跳过内存缓存

.diskCacheStrategy(DiskCacheStrategy.RESOURCE)

.into(new SimpleTarget() {

@Override

public void onResourceReady(@NonNull Drawable resource, @Nullable Transition transition) {

binding.iv.setImageDrawable(resource);

}

});

优化后:

image.png

18、DataBinding 自定义View的属性

@BindingAdapter({"app:nestedScrollingEnabled"})

public static void setNestedScrollingEnabled(RecyclerView recyclerView, boolean enabled) {

recyclerView.setNestedScrollingEnabled(enabled);

}

在xml中要加 @{} 配合使用,否则提示没有 app:nestedScrollingEnabled这个属性
app:nestedScrollingEnabled="@{false}"

17、静态变量

场景:CartUtil中有个isNeedChange静态变量,根据这个变量判断是否需要刷新购物车。在第一次打开app时可以正常执行,在直接按返回键退出在进来就不能正常刷新购物车了,原因是CartUtil没有随着app退出而销毁(类没有被卸载,app退出了,进程还在内存中,没有被系统杀死),isNeedChange在内存中的状态还是false。解决:1)不用静态变量 2)退出app是手动航设置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才能设置方向

解决:false

true

14、横竖屏切换导致activity重走生命周期解决办法:在清单文件的Activity里配置android:configChanges="orientation|screenSize"

13、华为荣耀6X:下载的视频本地无法播放(手机播放器闪退)。文件名:wx_2018-05-29 16:59:13_0.mp4。原因是手机不支持一些特殊符合:"/:*?<>|" 文件名包存在“:”所以不支持

12、序列化:把对象转换为字节序列的过程称为对象的序列化。

反序列化:把字节序列恢复为对象的过程称为对象的反序列化。

11、java kotlin 浮点计算进度丢失问题(101*29.8)。使用BigDecimal解决

10、1) 第一次请求权限时,用户拒绝了,下一次:shouldShowRequestPermissionRationale() 返回 true,应该显示一些为什么需要这个权限的说明

2)第二次请求权限时,用户拒绝了,并选择了“不在提醒”的选项时: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基础泛型类,子类不需要泛型的情况

7、new ArrayList<>(list)

6、kotlin泛型

out:小的可以赋给大的

class TypedClass()

val t1 = TypedClass()

val t2: TypedClass = t1

你可能感兴趣的:(Android无享商城问题记录)