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