Skip to content

Commit 4b7af41

Browse files
Merge pull request #189 from MihaiCristianCondrea/codex/add-lazy-initialization-for-adutils
Defer ad and cookie initialization to background worker
2 parents 1bfd24b + 55203b3 commit 4b7af41

File tree

5 files changed

+70
-3
lines changed

5 files changed

+70
-3
lines changed

app/src/main/java/com/d4rk/androidtutorials/java/ads/managers/AppOpenAd.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import android.app.Application.ActivityLifecycleCallbacks;
66
import android.content.Context;
77
import android.os.Bundle;
8-
import android.webkit.CookieManager;
98

109
import androidx.annotation.NonNull;
1110
import androidx.annotation.Nullable;
@@ -35,8 +34,6 @@ public class AppOpenAd extends Application implements ActivityLifecycleCallbacks
3534
public void onCreate() {
3635
super.onCreate();
3736
registerActivityLifecycleCallbacks(this);
38-
AdUtils.initialize(this);
39-
CookieManager.getInstance();
4037
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
4138
appOpenAdManager = new AppOpenAdManager(this);
4239
}
@@ -98,6 +95,7 @@ public AppOpenAdManager(Application application) {
9895
}
9996

10097
private void loadAd(Context context) {
98+
AdUtils.initialize(context);
10199
if (isLoadingAd || isAdAvailable()) {
102100
return;
103101
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.d4rk.androidtutorials.java.startup;
2+
3+
import android.content.Context;
4+
5+
import androidx.annotation.NonNull;
6+
import androidx.work.ExistingWorkPolicy;
7+
import androidx.work.OneTimeWorkRequest;
8+
import androidx.work.WorkManager;
9+
10+
/**
11+
* Helper used to enqueue a one-off background job for initializing ads and
12+
* cookies. The work is only scheduled once per app launch sequence.
13+
*/
14+
public final class StartupInitializer {
15+
16+
private static final String WORK_NAME = "startup_init";
17+
18+
private StartupInitializer() {
19+
// no-op
20+
}
21+
22+
/**
23+
* Schedules the {@link StartupWorker} using {@link WorkManager}. If the work
24+
* is already enqueued, this call is ignored.
25+
*/
26+
public static void schedule(@NonNull Context context) {
27+
OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(
28+
StartupWorker.class).build();
29+
WorkManager.getInstance(context).enqueueUniqueWork(
30+
WORK_NAME, ExistingWorkPolicy.KEEP, workRequest);
31+
}
32+
}
33+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.d4rk.androidtutorials.java.startup;
2+
3+
import android.content.Context;
4+
import android.webkit.CookieManager;
5+
6+
import androidx.annotation.NonNull;
7+
import androidx.work.Worker;
8+
import androidx.work.WorkerParameters;
9+
10+
import com.d4rk.androidtutorials.java.ads.AdUtils;
11+
12+
/**
13+
* Background worker that initializes advertising utilities and the
14+
* {@link CookieManager} away from the app's startup path.
15+
*/
16+
public class StartupWorker extends Worker {
17+
18+
public StartupWorker(@NonNull Context context, @NonNull WorkerParameters params) {
19+
super(context, params);
20+
}
21+
22+
@NonNull
23+
@Override
24+
public Result doWork() {
25+
AdUtils.initialize(getApplicationContext());
26+
CookieManager.getInstance();
27+
return Result.success();
28+
}
29+
}
30+

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/main/MainActivity.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import com.d4rk.androidtutorials.java.utils.EdgeToEdgeDelegate;
4545
import com.d4rk.androidtutorials.java.utils.ReviewHelper;
4646
import com.d4rk.androidtutorials.java.ads.AdUtils;
47+
import com.d4rk.androidtutorials.java.startup.StartupInitializer;
4748
import com.google.android.material.navigation.NavigationBarView;
4849
import com.google.android.material.snackbar.Snackbar;
4950
import com.google.android.play.core.appupdate.AppUpdateInfo;
@@ -112,6 +113,8 @@ protected void onCreate(Bundle savedInstanceState) {
112113
mBinding = ActivityMainBinding.inflate(getLayoutInflater());
113114
setContentView(mBinding.getRoot());
114115

116+
StartupInitializer.schedule(this);
117+
115118
mainViewModel = new ViewModelProvider(this).get(MainViewModel.class);
116119

117120
// Fallback: show the consent form again if required.

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/startup/StartupActivity.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.d4rk.androidtutorials.java.databinding.ActivityStartupBinding;
1111
import com.d4rk.androidtutorials.java.ui.screens.onboarding.OnboardingActivity;
1212
import com.google.android.ump.ConsentRequestParameters;
13+
import com.d4rk.androidtutorials.java.startup.StartupInitializer;
1314

1415
import dagger.hilt.android.AndroidEntryPoint;
1516
import me.zhanghai.android.fastscroll.FastScrollerBuilder;
@@ -25,6 +26,8 @@ protected void onCreate(Bundle savedInstanceState) {
2526
ActivityStartupBinding binding = ActivityStartupBinding.inflate(getLayoutInflater());
2627
setContentView(binding.getRoot());
2728

29+
StartupInitializer.schedule(this);
30+
2831
viewModel = new ViewModelProvider(this).get(StartupViewModel.class);
2932
ConsentRequestParameters params = new ConsentRequestParameters.Builder().build();
3033
viewModel.requestConsentInfoUpdate(this, params,

0 commit comments

Comments
 (0)