Android 开发中,有哪些坑需要注意?

       这个是看知乎的时候发现的一个问题Android 开发中,有哪些坑需要注意?,感觉挺有意思,就将自己遇到的坑记录下来。

1:Andorid L theme colorPrimary 不能使用带有alpha的颜色值,否则会有异常抛出, 直接判断了是否alpha是否等于0或者255,其他都会异常,代码如下:
@Override
protected void onApplyThemeResource(Resources.Theme theme, int resid,
    boolean first) {
    if (mParent == null) {
        super.onApplyThemeResource(theme, resid, first);
    } else {
    try {
        theme.setTo(mParent.getTheme());
    } catch (Exception e) {
    // Empty
    }
    theme.applyStyle(resid, false);
}

// Get the primary color and update the TaskDescription for this activity
if (theme != null) {
    TypedArray a =theme.obtainStyledAttributes(com.android.internal.R.styleable.Theme);
    int colorPrimary = a.getColor(com.android.internal.R.styleable.Theme_colorPrimary, 0);
    a.recycle();
    if (colorPrimary != 0) {
        ActivityManager.TaskDescription v = new ActivityManager.TaskDescription(null, null, colorPrimary);
    setTaskDescription(v);
            }
    }
}

/**
* Creates the TaskDescription to the specified values.
*
* @param label A label and description of the current state of this task.
* @param icon An icon that represents the current state of this task.
* @param colorPrimary A color to override the theme's primary color. This color must be opaque.
*/
public TaskDescription(String label, Bitmap icon, int colorPrimary) {
    if ((colorPrimary != 0) && (Color.alpha(colorPrimary) != 255)) {
    throw new RuntimeException("A TaskDescription's primary color should be opaque");
}

    mLabel = label;
    mIcon = icon;
    mColorPrimary = colorPrimary;
}
2:android 5.0花屏

由于过度绘制导致,关闭硬件加速, 尤其是使用webview后,可能会有大概率出现。

3:华为手机被KILL一系列问题

用户可以设置某个应用是否后台保护,按照华为的功能说明,理解为,如果不保护,那锁屏后程序将无法保持运行,也就是进程可能被KILL

新安装应用后,华为会给出选项,是否保持,这个默认选项上存在问题,有的应用默认不允许,有的应用默认就允许。

关于耗电高被KILL问题。

关于锁屏后网络被切断问题。锁屏就算保护,而网络或者SOCKET也可能被主动切断。

华为自己给出了BASTET系统解决方案,具体不展开。

4:相同颜色值在全局是同一份

有的时候可能很多地方都使用了相同的颜色,如果对其改变获取后的colorDrawable值,会导致其它所有使用的地方都改变,可以采用mutable避免。 这个其实不能算作坑,是自己代码没有看仔细。在生成颜色的时候缓存成了同一份,如果一个地方更改,则其他使用了该颜色的都会更改。

华为p8手机不能收到网络连接广播

5 : 华为p8手机,如果service与ui不在同一进程,也就是说对service设置了进程,service中监控网络的BroadcastReciver 会收不到网络连接的广播,但是能收到断开的广播,这个应该也是华为自己的优化,但是ui中的连接与断开都能收到广播。只有进程不同才存在该问题。

跨域读取cookie

Android 在4.4后更新了webview内核,在5.0前在webview中,不用的域可以读取其它域设置的cookie,但是在5.0开始,系统默认值改为了false。这样会导致之前以前采用旧方法的不能获取到。(其实在我看来,确实不应该跨域来读取cookie,多不安全)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {                                    CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView, true);
}
Webview中https与http混用

在5.0后如果webview加载的内容有http还有https,则会出错,因此需要开启混合模式加载:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}

Webview从本地选取文件

需要针对不同的版本提供不同的函数,还有更多的问题,单独写了一篇文章,参见 Android WebView填坑记录


16.8添加

TV开发中,不能向上导航

参见 Android TV开发

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值