@@ -3,45 +3,57 @@ package com.inaka.killertask
3
3
import android.os.AsyncTask
4
4
import android.util.Log
5
5
6
- class KillerTask <T >(val action : T , val onSuccess : (T ) -> Any , val onFailed : (Exception ? ) -> Any ) : AsyncTask<Void, Void, T>() {
6
+ class KillerTask <T >(val task : () -> T , val onSuccess : (T ) -> Any , val onFailed : (Exception ? ) -> Any ) : AsyncTask<Void, Void, T>() {
7
7
8
8
private var exception: Exception ? = null
9
9
10
10
companion object {
11
11
private val TAG = " KillerTask"
12
12
}
13
13
14
+ /* *
15
+ * Override AsyncTask's function doInBackground
16
+ */
14
17
override fun doInBackground (vararg params : Void ): T ? {
15
18
try {
16
19
Log .wtf(TAG , " Enter to doInBackground" )
17
- return run { action }
20
+ return run { task() }
18
21
} catch (e: Exception ) {
19
22
Log .wtf(TAG , " Error in background task" )
20
23
exception = e
21
24
return null
22
25
}
23
26
}
24
27
28
+ /* *
29
+ * Override AsyncTask's function onPostExecute
30
+ */
25
31
override fun onPostExecute (result : T ) {
26
32
Log .wtf(TAG , " Enter to onPostExecute" )
27
- if (! isCancelled) {
28
- if (exception != null ) {
33
+ if (! isCancelled) { // task not cancelled
34
+ if (exception != null ) { // fail
29
35
Log .wtf(TAG , " Failure with Exception" )
30
36
run { onFailed(exception) }
31
- } else {
37
+ } else { // success
32
38
Log .wtf(TAG , " Success" )
33
39
run { onSuccess(result) }
34
40
}
35
- } else {
41
+ } else { // task cancelled
36
42
Log .wtf(TAG , " Failure with RuntimeException caused by task cancelled" )
37
43
run { onFailed(RuntimeException (" Task was cancelled" )) }
38
44
}
39
45
}
40
46
47
+ /* *
48
+ * Execute AsyncTask
49
+ */
41
50
fun go () {
42
51
execute()
43
52
}
44
53
54
+ /* *
55
+ * Cancel AsyncTask
56
+ */
45
57
fun cancel () {
46
58
cancel(true )
47
59
}
0 commit comments