Skip to content

Commit c25dd1a

Browse files
authored
Merge pull request #268 from adjust/v4111
V4111
2 parents decf3fd + 06f73de commit c25dd1a

24 files changed

+66
-52
lines changed

Adjust/adjust/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
apply plugin: 'com.android.library'
22

33
def getVersionName() {
4-
return "4.11.0"
4+
return "4.11.1"
55
}
66

77
android {

Adjust/adjust/src/main/java/com/adjust/sdk/ActivityHandler.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import android.content.pm.ResolveInfo;
1717
import android.net.Uri;
1818
import android.os.Handler;
19+
import android.util.*;
1920

2021
import java.io.InputStream;
2122
import java.util.LinkedHashMap;
@@ -164,7 +165,7 @@ private ActivityHandler(AdjustConfig adjustConfig) {
164165

165166
logger.lockLogLevel();
166167

167-
scheduledExecutor = new CustomScheduledExecutor("ActivityHandler");
168+
scheduledExecutor = new CustomScheduledExecutor("ActivityHandler", false);
168169
internalState = new InternalState();
169170

170171
// enabled by default
@@ -664,7 +665,7 @@ private void initI() {
664665
}
665666
}
666667

667-
foregroundTimer = new TimerCycle(scheduledExecutor,
668+
foregroundTimer = new TimerCycle(
668669
new Runnable() {
669670
@Override
670671
public void run() {

Adjust/adjust/src/main/java/com/adjust/sdk/AttributionHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void teardown() {
4747
public AttributionHandler(IActivityHandler activityHandler,
4848
ActivityPackage attributionPackage,
4949
boolean startsSending) {
50-
scheduledExecutor = new CustomScheduledExecutor("AttributionHandler");
50+
scheduledExecutor = new CustomScheduledExecutor("AttributionHandler", false);
5151
logger = AdjustFactory.getLogger();
5252

5353
timer = new TimerOnce(scheduledExecutor, new Runnable() {

Adjust/adjust/src/main/java/com/adjust/sdk/Constants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public interface Constants {
2929
String BASE_URL = "https://app.adjust.com";
3030
String SCHEME = "https";
3131
String AUTHORITY = "app.adjust.com";
32-
String CLIENT_SDK = "android4.11.0";
32+
String CLIENT_SDK = "android4.11.1";
3333
String LOGTAG = "Adjust";
3434
String REFTAG = "reftag";
3535
String DEEPLINK = "deeplink";

Adjust/adjust/src/main/java/com/adjust/sdk/CustomScheduledExecutor.java

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,32 +8,38 @@
88
import java.util.concurrent.ThreadFactory;
99
import java.util.concurrent.ThreadPoolExecutor;
1010
import java.util.concurrent.TimeUnit;
11-
//import java.util.concurrent.atomic.AtomicInteger;
11+
import java.util.concurrent.atomic.*;
1212

1313
/**
1414
* Created by pfms on 05/08/2016.
1515
*/
16-
public class CustomScheduledExecutor {
17-
private ScheduledThreadPoolExecutor executor;
16+
public final class CustomScheduledExecutor {
1817
private String source;
19-
// private AtomicInteger threadCounter = new AtomicInteger(1);
18+
private ScheduledThreadPoolExecutor executor;
19+
private final AtomicInteger threadCounter = new AtomicInteger(1);
20+
2021

21-
public CustomScheduledExecutor(final String source) {
22-
executor = new ScheduledThreadPoolExecutor(1, // Single thread
22+
public CustomScheduledExecutor(final String source, boolean doKeepAlive) {
23+
this.source = source;
24+
25+
executor = new ScheduledThreadPoolExecutor(1, // Single thread
2326
new ThreadFactory() { // Creator of daemon threads
2427
@Override
2528
public Thread newThread(Runnable runnable) {
26-
Thread thread = Executors.defaultThreadFactory().newThread(runnable);
29+
Thread thread = Executors.defaultThreadFactory().newThread(new RunnableWrapper(runnable));
30+
2731
thread.setPriority(Thread.MIN_PRIORITY);
28-
thread.setName(Constants.THREAD_PREFIX + thread.getName() + source);
32+
thread.setName(Constants.THREAD_PREFIX + thread.getName() + "-" + source);
2933
thread.setDaemon(true);
34+
3035
thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
3136
@Override
3237
public void uncaughtException(Thread th, Throwable tr) {
3338
AdjustFactory.getLogger().error("Thread %s with error %s", th.getName(), tr.getMessage());
3439
}
3540
});
36-
// AdjustFactory.getLogger().verbose("Thread %s created", thread.getName());
41+
42+
//AdjustFactory.getLogger().verbose("Thread %s created", thread.getName());
3743
return thread;
3844
}
3945
}, new RejectedExecutionHandler() { // Logs rejected runnables rejected from the entering the pool
@@ -43,9 +49,11 @@ public void rejectedExecution(Runnable runnable, ThreadPoolExecutor executor) {
4349
}
4450
}
4551
);
46-
this.source = source;
47-
executor.setKeepAliveTime(10L, TimeUnit.MILLISECONDS);
48-
executor.allowCoreThreadTimeOut(true);
52+
53+
if (!doKeepAlive) {
54+
executor.setKeepAliveTime(10L, TimeUnit.MILLISECONDS);
55+
executor.allowCoreThreadTimeOut(true);
56+
}
4957
}
5058

5159
public Future<?> submit(Runnable task) {
@@ -59,12 +67,12 @@ public void shutdownNow() {
5967
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) {
6068
// AdjustFactory.getLogger().verbose("CustomScheduledExecutor scheduleWithFixedDelay from %s source, with %d delay and %d initial delay",
6169
// source, delay, initialDelay);
62-
return executor.scheduleWithFixedDelay(new RunnableWrapper(command), initialDelay, delay, unit);
70+
return executor.scheduleWithFixedDelay(command, initialDelay, delay, unit);
6371
}
6472

6573
public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit) {
6674
// AdjustFactory.getLogger().verbose("CustomScheduledExecutor schedule from %s source, with %d delay", source, delay);
67-
return executor.schedule(new RunnableWrapper(command), delay, unit);
75+
return executor.schedule(command, delay, unit);
6876
}
6977

7078
private class RunnableWrapper implements Runnable {
@@ -87,6 +95,7 @@ public void run() {
8795
runnable.run();
8896
// long after = System.currentTimeMillis();
8997
// AdjustFactory.getLogger().verbose("RunnableWrapper %d from %s source, after running at %d", threadNumber, source, after);
98+
9099
} catch (Throwable t) {
91100
AdjustFactory.getLogger().error("Runnable error %s", t.getMessage());
92101
}

Adjust/adjust/src/main/java/com/adjust/sdk/DeviceInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ private String getAppVersion(Context context) {
111111
String name = context.getPackageName();
112112
PackageInfo info = packageManager.getPackageInfo(name, 0);
113113
return info.versionName;
114-
} catch (PackageManager.NameNotFoundException e) {
114+
} catch (Exception e) {
115115
return null;
116116
}
117117
}

Adjust/adjust/src/main/java/com/adjust/sdk/PackageHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public void teardown(boolean deleteState) {
6969
public PackageHandler(IActivityHandler activityHandler,
7070
Context context,
7171
boolean startsSending) {
72-
this.scheduledExecutor = new CustomScheduledExecutor("PackageHandler");
72+
this.scheduledExecutor = new CustomScheduledExecutor("PackageHandler", false);
7373
this.logger = AdjustFactory.getLogger();
7474
this.backoffStrategy = AdjustFactory.getPackageHandlerBackoffStrategy();
7575

Adjust/adjust/src/main/java/com/adjust/sdk/RequestHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class RequestHandler implements IRequestHandler {
2323

2424
public RequestHandler(IPackageHandler packageHandler) {
2525
this.logger = AdjustFactory.getLogger();
26-
this.scheduledExecutor = new CustomScheduledExecutor("RequestHandler");
26+
this.scheduledExecutor = new CustomScheduledExecutor("RequestHandler", false);
2727
init(packageHandler);
2828
}
2929

Adjust/adjust/src/main/java/com/adjust/sdk/SdkClickHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void teardown() {
4040
public SdkClickHandler(boolean startsSending) {
4141
init(startsSending);
4242
this.logger = AdjustFactory.getLogger();
43-
this.scheduledExecutor = new CustomScheduledExecutor("SdkClickHandler");
43+
this.scheduledExecutor = new CustomScheduledExecutor("SdkClickHandler", false);
4444
this.backoffStrategy = AdjustFactory.getSdkClickBackoffStrategy();
4545
}
4646

Adjust/adjust/src/main/java/com/adjust/sdk/TimerCycle.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
* Created by pfms on 08/05/15.
99
*/
1010
public class TimerCycle {
11-
private WeakReference<CustomScheduledExecutor> scheduledExecutorWeakRef;
11+
private CustomScheduledExecutor executor;
12+
1213
private ScheduledFuture waitingTask;
1314
private String name;
1415
private Runnable command;
@@ -17,8 +18,8 @@ public class TimerCycle {
1718
private boolean isPaused;
1819
private ILogger logger;
1920

20-
public TimerCycle(CustomScheduledExecutor scheduler, Runnable command, long initialDelay, long cycleDelay, String name) {
21-
this.scheduledExecutorWeakRef = new WeakReference<CustomScheduledExecutor>(scheduler);
21+
public TimerCycle(Runnable command, long initialDelay, long cycleDelay, String name) {
22+
this.executor = new CustomScheduledExecutor(name, true);
2223

2324
this.name = name;
2425
this.command = command;
@@ -40,17 +41,9 @@ public void start() {
4041
return;
4142
}
4243

43-
CustomScheduledExecutor scheduledExecutor = scheduledExecutorWeakRef.get();
44-
if (scheduledExecutor == null) {
45-
return;
46-
}
47-
48-
//String initialDelaySeconds = Util.SecondsDisplayFormat.format(initialDelay / 1000.0);
49-
//logger.verbose("%s starting in %s seconds and cycle every %s seconds", name, initialDelaySeconds, cycleDelaySeconds);
50-
5144
logger.verbose("%s starting", name);
5245

53-
waitingTask = scheduledExecutor.scheduleWithFixedDelay(new Runnable() {
46+
waitingTask = executor.scheduleWithFixedDelay(new Runnable() {
5447
@Override
5548
public void run() {
5649
logger.verbose("%s fired", name);
@@ -90,9 +83,14 @@ private void cancel(boolean mayInterruptIfRunning) {
9083

9184
public void teardown() {
9285
cancel(true);
93-
if (scheduledExecutorWeakRef != null) {
94-
scheduledExecutorWeakRef.clear();
86+
87+
if (executor != null) {
88+
try {
89+
executor.shutdownNow();
90+
} catch (SecurityException ignored) {
91+
}
9592
}
96-
scheduledExecutorWeakRef = null;
93+
94+
executor = null;
9795
}
9896
}

0 commit comments

Comments
 (0)