安卓framework层强制打开硬件加速

来源:互联网 发布:socket编程语言 编辑:程序博客网 时间:2024/05/01 10:15
/frameworks/base/core/java/android/content/pm/PackageParser.java 
  if (sa.getBoolean(
                com.android.internal.R.styleable.AndroidManifestApplication_vmSafeMode,
                false)) {
            ai.flags |= ApplicationInfo.FLAG_VM_SAFE_MODE;
        }

        boolean hardwareAccelerated = sa.getBoolean(
                com.android.internal.R.styleable.AndroidManifestApplication_hardwareAccelerated,
                owner.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.ICE_CREAM_SANDWICH);

//  Patch Begin
        if ( pkgName.contains("com.shandong.shandonglive")) 
{
            Slog.w(TAG, "force open hardwareAccelerate for "+pkgName);
            hardwareAccelerated = true;
        }
// Patch End
        if (sa.getBoolean(
                com.android.internal.R.styleable.AndroidManifestApplication_hasCode,
                true)) {
            ai.flags |= ApplicationInfo.FLAG_HAS_CODE;

关于硬件加速,还是有很多缺点的,所以打开硬件加速一定要考虑好:

 硬件加速的限制:

      目前,Android对硬件加速的支持并非完美,有些绘制操作在开启硬件加速的情况下不能正常工作(具体的列表可以参考Android开发者文档)。

      不过Android可以保证内置的组件和应用支持硬件加速。因此,如果应用中只使用了标准UI组件,可以放心开启硬件加速。

      随着Android的版本升级,相信一段时间之后,硬件加速可以得到完美的支持。

      开启硬件加速之后的异常反应:

      1.某些UI元素没有显示:可能是没有调用invalidate

      2.某些UI元素没有更新:可能是没有调用invalidate

      3.绘制不正确:可能使用了不支持硬件加速的操作, 需要关闭硬件加速或者绕过该操作

      4.抛出异常:可能使用了不支持硬件加速的操作, 需要关闭硬件加速或者绕过该操作



0 0