每当我回来( onResume
)对于我唯一的活动,我的应用程序因以下错误而崩溃。我的活动只包含一个谷歌Map和一个横幅广告(来自facebook受众网络)
A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 in tid 14320 (RenderThread), pid 14265
如何解决此问题?我很感激你在这方面的帮助。我找不到问题,因为我的代码很简单。
这是我的 activity_maps.xml
:
<androidx.constraintlayout.widget.ConstraintLayout
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:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/constraintLayout"
tools:context=".MapsActivity">
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MapsActivity" />
<LinearLayout
android:id="@+id/banner_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
这是我的 MapsActivity.java
:
import androidx.fragment.app.FragmentActivity;
import android.os.Bundle;
import android.widget.LinearLayout;
import com.facebook.ads.AdSize;
import com.facebook.ads.AdView;
import com.facebook.ads.AudienceNetworkAds;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private AdView adView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
AudienceNetworkAds.initialize(this);
adView = new AdView(this, "my_placement_id", AdSize.BANNER_HEIGHT_50);
// Find the Ad Container
LinearLayout adContainer = findViewById(R.id.banner_container);
// Add the ad view to your activity layout
adContainer.addView(adView);
// Request an ad
adView.loadAd();
}
@Override
public void onMapReady(GoogleMap googleMap) {
}
}
下面是它的样子:
4条答案
按热度按时间slhcrj9b1#
正如qtmfld指出的,您的错误很可能发生在renderthread中。我受过教育的猜测是,这与你的横幅广告画上的Map碎片。
在xml布局中使用硬编码的片段元素时,尤其是使用片段事务时,存在已知的绘图问题。因此,有可能supportfragmentmanager在重新创建碎片状态时试图覆盖横幅广告,从而导致崩溃。
除此之外,在用户与之交互的组件上方使用横幅广告是违反谷歌广告政策的。
要确认这一点,您可以尝试更改布局约束,以便横幅广告不会覆盖Map片段:
lfapxunr2#
在logcat消息中:
android:hardwareAccelerated="false"
sqxo8psd3#
请检查您是否正在使用
HAXM
并检查它是否也发生在真实的设备上。你也可以试试googlemapsandroidsdkv.3.1.0beta,看看这个bug是否仍然存在。
cbjzeqam4#
你把一些事情搞混了!
看看facebook文档:初始化访问群体网络sdk
你可以看到他们在打电话
AudienceNetworkAds.initialize(this);
在应用程序类中,而不是在活动中。创建一个类,如文档中所示:
下一步是添加
android:name=".YourApplication"
在清单文件中,如示例中所示:这告诉android在哪里可以找到应用程序类的实现。
然后拆下
AudienceNetworkAds.initialize(this);
在mapsactivity类中的oncreate()方法中的行。现在一切都应该顺利了。
为什么会出现异常?
看看活动生命周期。
系统可以在每次启动活动时调用oncreate(),而不仅仅是onresume()或onstart()。
当您通过oncreate()方法第二次打开activity时,emulator会调用oncreate()。这导致了第二次
AudienceNetworkAds.initialize(this);
这导致了错误。另一个提示
别忘了实现ondestroy()方法,如: