我有一个应用程序,其中一个主要 Activity 是使用 FrameLayout。许多 fragment 是根据用户的输入创建的。每个 fragment 都有一个使用 Adview
的 admob 横幅广告。
我使用代码添加 fragment ;
getSupportFragmentManager().beginTransaction()
.add(R.id.container, Constants.frg1, Constants.frgTag1)
.addToBackStack(Constants.frgTag1)
.commit();
我不想使用 transaction.replace()
方法,因为我不想在所有 fragment 都在获取数据的反压时重新创建我之前的 fragment 来自远程服务器。
因此,当我添加新 fragment 时,会在 onCreateView
方法中的新 fragment 内创建一个新的 Adview。
在获得大约 10 个 fragment 后,我的应用程序开始变得迟钝。当我不使用 Adview 时,性能没有问题。
您可以说我只能在包含 fragment 的 MainActivity 中使用一个 Adview,但我不想这样,因为我有一个在应用程序中可见的 BottomNavigationView。 BottomNavigationBar + Adview = 屏幕上我的应用程序内容所剩无几。
那么有没有什么想法可以使用许多 fragment 来优化我的应用程序性能,并且每个 fragment 都有自己的 AdView
?
最佳答案
After get around 10 fragments my app starts to get laggy. When I dont use Adview there is no problem with the performance.
如果您向 backStack 添加多个 Fragment,您的应用将需要更多资源来存储这些元素,现在在每个 Fragment 上添加广告会导致高资源消耗、快速耗电、应用缓慢等。
Fragments的使用在应用程序中旨在表示 Activity 中 UI 的一部分,实际上您将使用完整的 Fragment 来更改 Activity 中的所有 UI。
在后台堆栈中保留多个 Fragment
几乎就像在堆栈中保留多个 Activity,这种方法是不正确的,会导致您的应用程序出现问题!
如何使用多个 fragment/广告优化您的应用
1) 使用 Activity 的方法 onPause()
销毁广告,如果您正在使用 Activity ,则使用 onResume()
重新创建广告
How to solve adview CPU consuming.
2) 通过java代码实现Admob:
AdMob banners cause high CPU usage
3) 启用hardware Acceleration :
启用您的 Activity :
<activity android:hardwareAccelerated="true" />
或者在你所有的应用程序中:
<application android:hardwareAccelerated="true">
4) 最重要的是,尝试改变您的方法,如果您使用的是 fragment ,您将使事务在内存中只有一个。
关于android - Admob 横幅在多个 fragment 中的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47623584/