首页 > 解决方案 > FLAG_DIM_BEHIND 导致 android oreo 滞后

问题描述

我在做什么:

我正在尝试创建一个简单的屏幕过滤器(调光器)应用程序。

我是怎么做到的:

我做了一项服务并使用以下代码来绘制应用程序。

    @Override
public int onStartCommand(Intent intent, int flags, int startId) {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
    } else {
        LAYOUT_FLAG = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
    }


    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_CONTENT,
            WindowManager.LayoutParams.MATCH_CONTENT,
            LAYOUT_FLAG, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS | WindowManager.LayoutParams.FLAG_DIM_BEHIND |
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
                    WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
            PixelFormat.TRANSLUCENT);

    params.alpha = 0.1f;
    params.dimAmount = 0.41f;

    WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    mOverlayView = inflater.inflate(R.layout.filter_layout, null);

    wm.addView(mOverlayView, params);
    return START_STICKY;
}

问题:

当我使用 FLAG_DIM_BEHIND 时,它会导致在打开应用程序动画时清晰可见的滞后。

我尝试了什么:

  1. 使用过的标志,如 FLAG_FULLSCREEN、FLAG_LAYOUT_IN_SCREEN 等(没用)

  2. 删除了 FLAG_DIM_BEHIND 并尝试使用此行自己设置颜色:mOverlayView.setBackgroundColor(getResources().getColor(R.color.light_black));

它运行良好并且没有任何延迟,但问题是,它(屏幕过滤器布局)并没有覆盖整个屏幕。导航栏保持未被覆盖。反正有没有滞后地实现这一目标?

此外,PlayStore 中有一个应用程序可以做到这一点,没有任何滞后或问题。

电话和操作系统:

Nexus 6P(8.1 奥利奥)

任何帮助或建议将不胜感激!

标签: javaandroidserviceflags

解决方案


推荐阅读