gpt4 book ai didi

java - 防止广告在后台展示 (Android Studio)

转载 作者:行者123 更新时间:2023-12-01 18:33:09 25 4
gpt4 key购买 nike

所以我将我的广告设置为每 5 分钟后展示一次,但问题是即使我的应用程序处于后台并且我正在使用另一个应用程序或只是将应用程序保持在后台,我的应用程序也会显示广告。我希望我的应用程序广告在我将应用程序置于后台后停止显示(我的广告在我关闭应用程序后不会显示,这很好,但在后台仍然会显示)

public class MainActivity extends AppCompatActivity {
private InterstitialAd mInterstitialAd;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ||
connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {


MobileAds.initialize(this,
"ca-app-pub-3940256099942544~3347551713");
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-3940255099942544/1033173712");
mInterstitialAd.loadAd(new AdRequest.Builder().build());
prepareAD();
ScheduledExecutorService ScheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
ScheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (mInterstitialAd.isLoaded()) {

mInterstitialAd.show();
} else {
Log.d("TAG", "Ad not loaded");
}
prepareAD();
}
});
}
}, 5, 5, TimeUnit.MINUTES);

}else{
Toast.makeText(getApplicationContext(), "No Internet Connection, please try again later...", Toast.LENGTH_LONG).show();

}
}

public void prepareAD() {
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173212");
mInterstitialAd.loadAd(new AdRequest.Builder().build());
}

}

最佳答案

我建议在主线程而不是某些后台线程中显示应用程序。如果您传递任何内容来检查 Activity 在后台线程中是否处于 Activity 状态,那么它就有可能发生内存泄漏。

即使它在后台,它也会检查 Activity 状态并且会失败。

getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)

使用生命周期组件执行此操作。

ScheduledExecutorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
boolean stateAlive = getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)
if (stateAlive && mInterstitialAd.isLoaded()) {

mInterstitialAd.show();
} else {
Log.d("TAG", "Ad not loaded");
}
prepareAD();
}
});
}
}, 5, 5, TimeUnit.MINUTES);

关于java - 防止广告在后台展示 (Android Studio),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60124444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com