美文网首页
Android无享商城问题记录

Android无享商城问题记录

作者: 歌莫信息 | 来源:发表于2018-06-26 16:44 被阅读15次

    @钟建新

    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 销毁

    <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 字节数

    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<Drawable>() {
    
    @Override
    
    public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> 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<Drawable>() {
    
    @Override
    
    public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> 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才能设置方向

    解决:<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、序列化:把对象转换为字节序列的过程称为对象的序列化。

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

    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<out T>()

    val t1 = TypedClass<String>()

    val t2: TypedClass<Any> = t1

    相关文章

      网友评论

          本文标题:Android无享商城问题记录

          本文链接:https://www.haomeiwen.com/subject/cbsmyftx.html