NovelReaderAdDemo icon indicating copy to clipboard operation
NovelReaderAdDemo copied to clipboard

绘制带图片的广告页会特别卡

Open jdwxp opened this issue 5 years ago • 25 comments

jdwxp avatar Jul 09 '19 03:07 jdwxp

@jdwxp 同问,确实很卡顿,应该是dispatchDraw 方法引起的,请问你是如何解决的,

KotlinLan avatar Jul 10 '19 06:07 KotlinLan

还在努力解决中。。。。

jdwxp avatar Jul 10 '19 07:07 jdwxp

我还没解决,dispatchDraw注释了其实也还是卡顿的,应该还是有一个地方耗时了,导致页面绘制掉帧。

------------------ 原始邮件 ------------------ 发件人: "KotlinLan"[email protected]; 发送时间: 2019年7月10日(星期三) 下午2:52 收件人: "itwangyu/NovelReaderAdDemo"[email protected]; 抄送: "攥在〃手心"[email protected]; "Mention"[email protected]; 主题: Re: [itwangyu/NovelReaderAdDemo] 绘制带图片的广告页会特别卡 (#5)

@jdwxp 同问,确实很卡顿,应该是dispatchDraw 方法引起的,请问你是如何解决的,

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

jdwxp avatar Jul 10 '19 07:07 jdwxp

我现在遇到如果是腾讯的原生广告,有时候会绘制不出来,只有一条白线,第二次就好了。

KotlinLan avatar Jul 10 '19 07:07 KotlinLan

卡顿问题你解决了么?是做了哪里的修改吗?

------------------ 原始邮件 ------------------ 发件人: "KotlinLan"[email protected]; 发送时间: 2019年7月10日(星期三) 下午3:22 收件人: "itwangyu/NovelReaderAdDemo"[email protected]; 抄送: "攥在〃手心"[email protected]; "Mention"[email protected]; 主题: Re: [itwangyu/NovelReaderAdDemo] 绘制带图片的广告页会特别卡 (#5)

我现在遇到如果是腾讯的原生广告,有时候会绘制不出来,只有一条白线,第二次就好了。

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

jdwxp avatar Jul 10 '19 07:07 jdwxp

卡顿的也没完全解决,你看看这样会不会好一点。 image

KotlinLan avatar Jul 10 '19 07:07 KotlinLan

在dispatchDraw方法里面加一个判断,好像效果不怎么理想。你可以试试

case TxtPage.VALUE_STRING_AD_TYPE:

                if (mPageAnim.mScroller.isFinished()&&getChildCount()>0){
                    if (shouldDraw) {
                        super.dispatchDraw(canvas);
                        shouldDraw=false;
                        Log.e("tag","==444444444===");
                    }

                }

可能不行,还得想办法

KotlinLan avatar Jul 10 '19 07:07 KotlinLan

嗯。确实还是卡顿,得想别的办法

------------------ 原始邮件 ------------------ 发件人: "KotlinLan"[email protected]; 发送时间: 2019年7月10日(星期三) 下午3:33 收件人: "itwangyu/NovelReaderAdDemo"[email protected]; 抄送: "攥在〃手心"[email protected]; "Mention"[email protected]; 主题: Re: [itwangyu/NovelReaderAdDemo] 绘制带图片的广告页会特别卡 (#5)

在dispatchDraw方法里面加一个判断,好像效果不怎么理想。你可以试试

case TxtPage.VALUE_STRING_AD_TYPE: if (mPageAnim.mScroller.isFinished()&&getChildCount()>0){ if (shouldDraw) { super.dispatchDraw(canvas); shouldDraw=false; Log.e("tag","==444444444==="); } }
可能不行,还得想办法

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

jdwxp avatar Jul 10 '19 07:07 jdwxp

嗯,解决了记得彼此分享一下

KotlinLan avatar Jul 10 '19 07:07 KotlinLan

@jdwxp 有解决卡顿得问题吗?我试了怎么都卡顿

KotlinLan avatar Jul 10 '19 14:07 KotlinLan

我准备换个思路,明天试试看,如果可以再跟你说------------------ 原始邮件 ------------------ 发件人: "KotlinLan"[email protected] 发送时间: 2019年7月10日(星期三) 晚上10:35 收件人: "itwangyu/NovelReaderAdDemo"[email protected]; 抄送: "jdwxp"[email protected];"Mention"[email protected]; 主题: Re: [itwangyu/NovelReaderAdDemo] 绘制带图片的广告页会特别卡 (#5)

@jdwxp 有解决卡顿得问题吗?我试了怎么都卡顿

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

jdwxp avatar Jul 10 '19 14:07 jdwxp

减少dispatchDraw的次数 removeView换成setVisibility ?

Dazzworld avatar Jul 11 '19 08:07 Dazzworld

@Dazzworld 我现在也是这样,还是卡顿,类似腾讯的原生广告还加载不出来,或者只能加载一半出来!

KotlinLan avatar Jul 11 '19 09:07 KotlinLan

开始滑动时候允许一次dispatchDraw 滑动完就不限制dispatchDraw了

Dazzworld avatar Jul 11 '19 10:07 Dazzworld

效果怎么样,有代码看看么

KotlinLan avatar Jul 11 '19 11:07 KotlinLan

QQ截图20190711200255 isRunning是判断是否开始滑动 shouldDraw 应该是在visibility状态改变前给true的 效果的话感觉还行 荣耀8上感觉不到太明显的卡顿 (广告最好预加载一下

Dazzworld avatar Jul 11 '19 12:07 Dazzworld

在好一点的手机上确实不容易感知到,我用一台一千七左右的oppo手机,卡顿就很明显。我现在直接在外面把布局转换成图片,然后画到pageview上,然后再pageview上做事件监听来加广告逻辑。这个直接加view的方式还得继续想办法。。。。

jdwxp avatar Jul 12 '19 02:07 jdwxp

关于卡顿的问题我实在能力有限,目前也没什么办法。我公司现在使用的是另一个阅读器,但也只是在架构上好了一些,加入广告的方式还是这样,所以在低端机上还是会卡顿。另外我也很久没研究了,现在业务不在小说这里。。。 另外你们上面说的只绘制一次或者把广告转换成图片都不太行得通,首先很多广告都是不能预加载的,比如广点通的广告,他里面其实是一个webview,所以这个广告view其实是在展示时候才开始加载里面的内容。如果只绘制一次后面的内容就显示不出来了。如果转换成图片的话,那广告是不会给你算作展示的,这样也不太行。只有原生广告会支持的比较好,原生广告可以预加载

itwangyu avatar Jul 12 '19 03:07 itwangyu

确实是这样,腾讯的广告用的是webview,只有展示的时候才给你绘制,只绘制一次,广告就可能显示不全,重复调用dispatchDraw页面非常卡顿。现在不知道怎么搞了。

KotlinLan avatar Jul 12 '19 03:07 KotlinLan

我的意思是开始滑动的时候才允许绘制一次,滑动的时候不断绘制肯定会卡。 滑动完成就不限制了。

Dazzworld avatar Jul 13 '19 07:07 Dazzworld

确实是这样,腾讯的广告用的是webview,只有展示的时候才给你绘制,只绘制一次,广告就可能显示不全,重复调用dispatchDraw页面非常卡顿。现在不知道怎么搞了。

滑动的时候不要绘制 等翻页完了 再绘制 静止状态下 怎么卡顿都感觉不出来咯

Dazzworld avatar Jul 13 '19 08:07 Dazzworld

即使等翻页完了 再绘制,腾讯的原生广告也还是会出现绘制不完整的情况。

KotlinLan avatar Jul 13 '19 08:07 KotlinLan

身边如果有1000左右的低端机可以试试,绘制一次确实还是有卡顿,真令人头疼。。。------------------ 原始邮件 ------------------ 发件人: "Chen"[email protected] 发送时间: 2019年7月13日(星期六) 下午4:07 收件人: "itwangyu/NovelReaderAdDemo"[email protected]; 抄送: "jdwxp"[email protected];"Mention"[email protected]; 主题: Re: [itwangyu/NovelReaderAdDemo] 绘制带图片的广告页会特别卡 (#5)

确实是这样,腾讯的广告用的是webview,只有展示的时候才给你绘制,只绘制一次,广告就可能显示不全,重复调用dispatchDraw页面非常卡顿。现在不知道怎么搞了。

滑动的时候不要绘制 等翻页完了 再绘制 静止状态下 怎么卡顿都感觉不出来咯

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

jdwxp avatar Jul 13 '19 08:07 jdwxp

    @Override
    public void onDescendantInvalidated(@NonNull View child, @NonNull View target) {
        Log.d("czc", "onDescendantInvalidated: ");
        shouldDraw = true;
        super.onDescendantInvalidated(child, target);
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        try {
            if (mPageLoader == null) {
                return;
            }
            if (shouldDraw){
                Log.d("czc", "dispatchDraw: ");
                super.dispatchDraw(canvas);
                shouldDraw = false;
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

可以试试这样

Dazzworld avatar Jul 22 '19 07:07 Dazzworld

试了一下,腾讯的广告还是卡顿。

KotlinLan avatar Jul 22 '19 16:07 KotlinLan