不要在预览窗口创建线程 - 华为广告实施

Posted

技术标签:

【中文标题】不要在预览窗口创建线程 - 华为广告实施【英文标题】:Don't Create Threads in the preview window - Huawei Ads Implementation 【发布时间】:2021-10-25 08:24:17 【问题描述】:

我正在安卓应用程序中实现华为广告。我已经浏览了所有https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/publisher-service-banner-0000001050066915 并成功实施了广告,但是 android studio preview 给了我错误,并且在 xml 中添加华为广告时没有显示预览。删除后华为广告预览显示。

以下是我的布局:

 <?xml version="1.0" encoding="utf-8"?>
<com.huawei.hms.ads.nativead.NativeView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/native_video_view"
    android:layout_
    android:layout_
    android:layout_centerInParent="true"
    android:background="#FFFFFF"
    android:orientation="vertical">
    <com.huawei.hms.ads.nativead.MediaView
        android:id="@+id/ad_media"
        android:layout_
        android:layout_
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_
        android:layout_
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:background="@color/white">
        <TextView
            android:id="@+id/ad_title"
            android:layout_
            android:layout_
            android:layout_marginStart="24dp"
            android:layout_marginTop="16dp"
            android:alpha="1"
            android:textColor="#000000"
            android:textSize="@dimen/hiad_text_13_sp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"/>
        <TextView
            android:id="@+id/ad_source"
            android:layout_
            android:layout_
            android:layout_marginStart="24dp"
            android:layout_marginTop="2dp"
            android:layout_marginBottom="16dp"
            android:alpha="0.6"
            android:text="asdfasj"
            android:maxWidth="158dp"
            android:textColor="#666666"
            android:textSize="@dimen/hiad_text_12_sp"
            app:layout_constraintStart_toStartOf="@id/ad_title"
            app:layout_constraintEnd_toStartOf="@id/ad_flag"
            app:layout_constraintTop_toBottomOf="@id/ad_title"
        />

        <TextView
            android:id="@+id/ad_flag"
            android:layout_
            android:layout_
            android:background="@drawable/native_flag_rounded_corners_shape"
            android:text="@string/ad_flag"
            android:textColor="#FFFFFF"
            android:textSize="8sp"
            android:layout_marginStart="@dimen/_10sdp"
            android:textStyle="bold"
            app:layout_constraintBottom_toBottomOf="@id/ad_source"
            app:layout_constraintStart_toEndOf="@id/ad_source"
            app:layout_constraintTop_toTopOf="@id/ad_source" />

        <Button
            android:id="@+id/ad_call_to_action"
            android:layout_
            android:layout_
            android:layout_alignParentEnd="true"
            android:background="@drawable/native_button_rounded_corners_shape"
            android:textColor="#FFFFFF"
            android:textSize="10sp"
            android:layout_marginEnd="@dimen/_20sdp"
            app:layout_constraintBottom_toBottomOf="@+id/ad_source"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</com.huawei.hms.ads.nativead.NativeView>

以下是我遇到的错误 当我将根标签删除到约束布局时。预览在屏幕上可见,所有错误都消失了。在这两个标签中,我面临以下异常:

FirstException:不要在预览中创建线程

java.lang.IllegalStateException: 不允许新建 预览中的线程在 com.huawei.hms.ads.kn.newThread 在 java.util.concurrent.ThreadPoolExecutor$Worker.(ThreadPoolExecutor.java:623) 在 java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:912) 在 java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1343) 在 com.huawei.hms.ads.km.Code 在 com.huawei.hms.ads.km.I 在 com.huawei.hms.ads.lj.Code 位于 com.huawei.hms.ads.lj.V 位于 com.huawei.hms.ads.dl.Z 在 com.huawei.hms.ads.dl.V  在 com.huawei.hms.ads.dl.Code 位于 com.huawei.openalliance.ad.views.PPSNativeView.Code 位于 com.huawei.openalliance.ad.views.PPSNativeView。在 com.huawei.hms.ads.nativead.NativeView。在 jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(NativeConstructorAccessorImpl.java:-2) 在 jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:490) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:959) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:657) android.view.LayoutInflater.inflate(LayoutInflater.java:499)

第二个例外:无法实例化一个或多个类 无法实例化以下类: - com.huawei.hms.ads.nativead.MediaView(开放类,显示异常,清除缓存) - com.huawei.openalliance.ad.views.VideoView (Open Class, Show Exception, Clear Cache) 提示:在自定义中使用 View.isInEditMode() 在 IDE 中显示时跳过代码或显示示例数据的视图。如果这 是意外错误你也可以尝试构建项目,然后 手动刷新布局。异常详情 java.lang.NullPointerException 在 com.huawei.openalliance.ad.views.NativeVideoView.Code 位于 com.huawei.openalliance.ad.views.NativeVideoView。在 com.huawei.hms.ads.nativead.MediaView.Code 位于 com.huawei.hms.ads.nativead.MediaView。在 jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(NativeConstructorAccessorImpl.java:-2) 在 jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:490) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:959) 在 android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:1121) 在 android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:1095) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1082) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:680) android.view.LayoutInflater.inflate(LayoutInflater.java:499)

我已使缓存无效并重新启动 Android Studio,但还没有任何效果。谁能帮我渲染预览。任何帮助,将不胜感激。谢谢

【问题讨论】:

这明显是SDK的bug,建议你去华为投诉 感谢您提供有关此问题的信息,我们已将其报告给研发团队,如果我们需要进一步的信息或您的帮助,将尽快与您联系。 感谢您的回复。 【参考方案1】:

目前Ads kit SDK引用了HMS base SDK代码,但是好像没有集成HMS base SDK。

因此,预览期间出现以下错误。

如果您选择不集成HMS base SDK,Ads SDK功能不受影响,但在预览时会受到影响。

所以有两个选项供您参考: 一种方法是你可以尝试集成hms base sdk,或者另一种方法是忽略这个预览错误,因为这不会影响实际操作。

【讨论】:

我有示例应用程序,其中集成了 HMS 基础 SDK,但我仍然收到 Thread 异常并且没有查看预览。以下是屏幕截图的链接。 ibb.co/hCnwfht .. 这是我评论横幅 xml 标记时的链接。预览可见ibb.co/9VjDzc1 我不认为“忽略此预览错误”是一个好的选择。 如果我忽略此预览,我将如何根据设计调整布局? hi@waheed shah,你能不能试着把 NativeView 改成 RelativeLayout,调整一下再改回来? 嗨@shirley 目前我正在更改视图以根据设计进行调整。等待修复。感谢您的即时回复。

以上是关于不要在预览窗口创建线程 - 华为广告实施的主要内容,如果未能解决你的问题,请参考以下文章

正确关闭使用 ATL 在单独线程上创建的窗口

QT中想在子线程中创建对话窗口怎么建

原生广告 MediaView 与华为广告实施中的约束不匹配

创建窗口和线程 - C++

我可以使用 FLTK 1.3 在不同线程上创建窗口吗?

易语言怎么启动线程