我无法在 api 级别 15 进行硬件加速

Posted

技术标签:

【中文标题】我无法在 api 级别 15 进行硬件加速【英文标题】:I can't hardware acceleration at api level 15 【发布时间】:2018-04-23 04:53:04 【问题描述】:

我正在测试一个在 android 上加速的简单硬件。

我在互联网上找到了这段代码,所以我想测试一下。当我在 API 级别 26 测试此代码时它可以工作,但是当我在相同 avd 的 API 级别 15 测试此代码时,它不起作用。

这是我的清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.shin.myapplication">

<application
    android:hardwareAccelerated="true"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

还有 MainActivity。

public class MainActivity extends AppCompatActivity 

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.acceltest1);
    AccelTestView vw = new AccelTestView(this);
    setContentView(vw);

这是 AccelTestView 代码

public class AccelTestView extends View 

public AccelTestView(Context context) 
    super(context);


public void onDraw(Canvas canvas) 
    Log.v("temp", String.valueOf(canvas.isHardwareAccelerated()));
    invalidate();

Here is API Level 15 Image

And here is API Level 26 Image

这两个图像是相同的代码和相同的 avd,即 Nexus 5x。

为什么会这样??

【问题讨论】:

【参考方案1】:

请阅读:

https://developer.android.com/guide/topics/graphics/hardware-accel.html#unsupported

从图表中可以看出,setAntiAlias 的硬件加速直到 API 16 用于行,API 18 用于文本。

【讨论】:

谢谢,我想念那个。但是如果我在 OnDraw() 中删除所有代码并且写下 'Log.v("temp", String.valueOf(canvas.isHardwareAccelerated()));'它返回 false。 用您所做的事情更新您的问题,因为从您的评论中不清楚您对代码所做的更改以及您现在得到的结果。 好的。问题已更新。我只更改了 AccelTestView 类的 onDraw 方法。正如您在我尝试该代码时看到的那样,当我看到 logcat 时,它是错误的。 道歉 - 刚刚意识到您正在测试 AVD。检查每个模拟器的模拟图形设置:developer.android.com/studio/run/… 另请注意下面部分中可用的命令行模式。您的特定配置(PC/显卡)可能会遇到边缘情况之一。为了完整起见,您应该使用什么 CPU 和模拟器版本(HAXM 或 ARM 仿真)更新您的问题。 非常感谢您的帮助,并对我的回答缓慢感到抱歉。我接近“验证配置”,我发现模拟的性能是由软件设置的。所以我更改了该设置并再次检查。但设置由软件保留。它没有改变。我只是放弃了这个问题。只是我更改了最低 API 级别。非常感谢您的帮助。

以上是关于我无法在 api 级别 15 进行硬件加速的主要内容,如果未能解决你的问题,请参考以下文章

Android硬件加速

使用 lockCanvas() 的 Android TextureView 硬件加速

如何在 SDL 中进行硬件加速 Alpha 混合?

wpfitemscontrolimage内存占用

FFmpeg使用显卡进行转码硬件加速的记录,以及和软压的比较

Android硬件加速介绍与实现