15
15
package com .google .firebase .concurrent ;
16
16
17
17
import android .annotation .SuppressLint ;
18
+ import android .os .Build ;
18
19
import android .os .Process ;
20
+ import android .os .StrictMode ;
21
+ import com .google .firebase .BuildConfig ;
19
22
import com .google .firebase .annotations .concurrent .Background ;
20
23
import com .google .firebase .annotations .concurrent .Blocking ;
21
24
import com .google .firebase .annotations .concurrent .Lightweight ;
@@ -39,15 +42,17 @@ public class ExecutorsRegistrar implements ComponentRegistrar {
39
42
() ->
40
43
scheduled (
41
44
Executors .newFixedThreadPool (
42
- 4 , factory ("Firebase Background" , Process .THREAD_PRIORITY_BACKGROUND ))));
45
+ 4 ,
46
+ factory (
47
+ "Firebase Background" , Process .THREAD_PRIORITY_BACKGROUND , bgPolicy ()))));
43
48
44
49
private static final Lazy <ScheduledExecutorService > LITE_EXECUTOR =
45
50
new Lazy <>(
46
51
() ->
47
52
scheduled (
48
53
Executors .newFixedThreadPool (
49
54
Math .max (2 , Runtime .getRuntime ().availableProcessors ()),
50
- factory ("Firebase Lite" , Process .THREAD_PRIORITY_DEFAULT ))));
55
+ factory ("Firebase Lite" , Process .THREAD_PRIORITY_DEFAULT , litePolicy () ))));
51
56
52
57
private static final Lazy <ScheduledExecutorService > BLOCKING_EXECUTOR =
53
58
new Lazy <>(
@@ -96,6 +101,33 @@ private static ScheduledExecutorService scheduled(ExecutorService delegate) {
96
101
}
97
102
98
103
private static ThreadFactory factory (String threadPrefix , int priority ) {
99
- return new CustomThreadFactory (threadPrefix , priority );
104
+ return new CustomThreadFactory (threadPrefix , priority , null );
105
+ }
106
+
107
+ private static ThreadFactory factory (
108
+ String threadPrefix , int priority , StrictMode .ThreadPolicy policy ) {
109
+ return new CustomThreadFactory (threadPrefix , priority , policy );
110
+ }
111
+
112
+ private static StrictMode .ThreadPolicy bgPolicy () {
113
+ StrictMode .ThreadPolicy .Builder builder = new StrictMode .ThreadPolicy .Builder ().detectNetwork ();
114
+ if (Build .VERSION .SDK_INT >= 23 ) {
115
+ builder .detectResourceMismatches ();
116
+ if (Build .VERSION .SDK_INT >= 26 ) {
117
+ builder .detectUnbufferedIo ();
118
+ }
119
+ }
120
+ if (BuildConfig .DEBUG ) {
121
+ builder .penaltyDeath ();
122
+ }
123
+ return builder .penaltyLog ().build ();
124
+ }
125
+
126
+ private static StrictMode .ThreadPolicy litePolicy () {
127
+ StrictMode .ThreadPolicy .Builder builder = new StrictMode .ThreadPolicy .Builder ().detectAll ();
128
+ if (BuildConfig .DEBUG ) {
129
+ builder .penaltyDeath ();
130
+ }
131
+ return builder .penaltyLog ().build ();
100
132
}
101
133
}
0 commit comments