Skip to content

Commit ba1d1a7

Browse files
authored
Merge pull request #231 from prebid/async_replacement_bg_executor
Removed AsyncTasks, replaced with executor implementation
2 parents 3f53ddb + 60dd5ad commit ba1d1a7

17 files changed

+879
-309
lines changed

PrebidMobile/PrebidMobile-core/src/main/java/org/prebid/mobile/AdUnit.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import android.support.annotation.NonNull;
2525
import android.text.TextUtils;
2626

27+
import org.prebid.mobile.tasksmanager.TasksManager;
28+
2729
import java.util.Collections;
2830
import java.util.HashMap;
2931
import java.util.HashSet;
@@ -79,8 +81,13 @@ public void fetchDemand(@NonNull final OnCompleteListener2 listener) {
7981

8082
fetchDemand(keywordsMap, new OnCompleteListener() {
8183
@Override
82-
public void onComplete(ResultCode resultCode) {
83-
listener.onComplete(resultCode, keywordsMap.size() != 0 ? Collections.unmodifiableMap(keywordsMap) : null);
84+
public void onComplete(final ResultCode resultCode) {
85+
TasksManager.getInstance().executeOnMainThread(new Runnable() {
86+
@Override
87+
public void run() {
88+
listener.onComplete(resultCode, keywordsMap.size() != 0 ? Collections.unmodifiableMap(keywordsMap) : null);
89+
}
90+
});
8491
}
8592
});
8693
}

PrebidMobile/PrebidMobile-core/src/main/java/org/prebid/mobile/AdvertisingIDUtil.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818

1919
import android.annotation.SuppressLint;
2020
import android.content.Context;
21-
import android.os.AsyncTask;
22-
import android.os.Build;
21+
import android.os.Looper;
2322
import android.text.TextUtils;
2423

24+
import org.prebid.mobile.tasksmanager.TasksManager;
25+
2526
import java.lang.ref.WeakReference;
2627
import java.lang.reflect.InvocationTargetException;
2728
import java.lang.reflect.Method;
@@ -56,7 +57,7 @@ private enum STATE {
5657
private static STATE state = STATE.NOT_FETCHED;
5758

5859
/**
59-
* Starts an AsyncTask to retrieve and set the AAID.
60+
* Fetch a background executor to retrieve and set the AAID.
6061
* Does nothing if PrebidServerSettings.aaid is already set for the SDK.
6162
*
6263
* @param context context to retrieve the AAID on.
@@ -68,19 +69,15 @@ static void retrieveAndSetAAID(Context context) {
6869
}
6970

7071
AAIDTask getAAIDTask = new AAIDTask(context);
71-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
72-
getAAIDTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
73-
} else {
74-
getAAIDTask.execute();
75-
}
72+
getAAIDTask.execute();
7673
}
7774

7875
/**
7976
* Retrieves AAID from GooglePlayServices via reflection
8077
* Sets the SDK's aaid value to the result if successful,
8178
* or null if failed.
8279
*/
83-
private static class AAIDTask extends AsyncTask<Void, Void, Void> {
80+
private static class AAIDTask {
8481
private static final String cAdvertisingIdClientName
8582
= "com.google.android.gms.ads.identifier.AdvertisingIdClient";
8683
private static final String cAdvertisingIdClientInfoName
@@ -92,8 +89,20 @@ private AAIDTask(Context context) {
9289
this.context = new WeakReference<Context>(context);
9390
}
9491

95-
@Override
96-
protected Void doInBackground(Void... params) {
92+
protected void execute() {
93+
if (Looper.myLooper() == Looper.getMainLooper()) {
94+
TasksManager.getInstance().executeOnBackgroundThread(new Runnable() {
95+
@Override
96+
public void run() {
97+
fetchAAID();
98+
}
99+
});
100+
} else {
101+
fetchAAID();
102+
}
103+
}
104+
105+
private void fetchAAID() {
97106
state = STATE.FETCHING;
98107
// attempt to retrieve AAID from GooglePlayServices via reflection
99108
// Setting aaid in the backend thread
@@ -129,7 +138,6 @@ protected Void doInBackground(Void... params) {
129138
} else {
130139
state = STATE.FETCHED;
131140
}
132-
return null;
133141
}
134142
}
135143
}

PrebidMobile/PrebidMobile-core/src/main/java/org/prebid/mobile/DemandFetcher.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import android.support.annotation.NonNull;
2323
import android.support.annotation.VisibleForTesting;
2424

25+
import org.prebid.mobile.tasksmanager.TasksManager;
26+
2527
import java.util.HashMap;
2628
import java.util.UUID;
2729

@@ -131,12 +133,19 @@ private void notifyListener(final ResultCode resultCode) {
131133
LogUtil.d("notifyListener:" + resultCode);
132134

133135
if (listener != null) {
134-
listener.onComplete(resultCode);
135-
}
136-
// for single request, if done, finish current fetcher,
137-
// let ad unit create a new fetcher for next request
138-
if (periodMillis <= 0) {
139-
destroy();
136+
TasksManager.getInstance().executeOnMainThread(new Runnable() {
137+
@Override
138+
public void run() {
139+
if (listener != null) {
140+
listener.onComplete(resultCode);
141+
}
142+
// for single request, if done, finish current fetcher,
143+
// let ad unit create a new fetcher for next request
144+
if (periodMillis <= 0) {
145+
destroy();
146+
}
147+
}
148+
});
140149
}
141150
}
142151

PrebidMobile/PrebidMobile-core/src/main/java/org/prebid/mobile/DownloadImageTask.java

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,55 @@
22

33
import android.graphics.Bitmap;
44
import android.graphics.BitmapFactory;
5-
import android.os.AsyncTask;
5+
import android.os.Looper;
66
import android.widget.ImageView;
77

8+
import org.prebid.mobile.tasksmanager.TasksManager;
9+
810
import java.io.InputStream;
911
import java.lang.ref.WeakReference;
1012

11-
public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
13+
public class DownloadImageTask {
14+
1215
WeakReference<ImageView> imageRef;
1316

14-
public DownloadImageTask(ImageView image) {
17+
protected DownloadImageTask(ImageView image) {
1518
this.imageRef = new WeakReference<>(image);
1619
}
1720

18-
protected Bitmap doInBackground(String... urls) {
19-
String urldisplay = urls[0];
20-
Bitmap mIcon11 = null;
21+
protected void execute(final String url) {
22+
if (Looper.myLooper() == Looper.getMainLooper()) {
23+
TasksManager.getInstance().executeOnBackgroundThread(new Runnable() {
24+
@Override
25+
public void run() {
26+
fetchAndProcessImage(url);
27+
}
28+
});
29+
} else {
30+
fetchAndProcessImage(url);
31+
}
32+
}
33+
34+
private void fetchAndProcessImage(String url) {
35+
Bitmap bitmap = null;
2136
try {
22-
InputStream in = new java.net.URL(urldisplay).openStream();
23-
mIcon11 = BitmapFactory.decodeStream(in);
37+
InputStream in = new java.net.URL(url).openStream();
38+
bitmap = BitmapFactory.decodeStream(in);
2439
} catch (Exception e) {
2540
LogUtil.e("Error", e.getMessage());
2641
}
27-
return mIcon11;
42+
processImage(bitmap);
2843
}
2944

30-
protected void onPostExecute(Bitmap result) {
31-
ImageView image = this.imageRef.get();
32-
if (image != null) {
33-
image.setImageBitmap(result);
34-
}
45+
private void processImage(final Bitmap result) {
46+
TasksManager.getInstance().executeOnMainThread(new Runnable() {
47+
@Override
48+
public void run() {
49+
ImageView image = imageRef.get();
50+
if (image != null) {
51+
image.setImageBitmap(result);
52+
}
53+
}
54+
});
3555
}
3656
}

0 commit comments

Comments
 (0)