
RxJava 2.2.7 Update
Вышла минорная версия RxJava в рамках которой произошел багфикс и улучшение
doOnTerminateSize: a a a

doOnTerminate




launch(Dispatchers.IO) {    val image = api.fetchImageAsync(url).await()    val blurred =withContext(Dispatchers.Default) { 
         image.blur()    }    withContext(Dispatchers.Main) {        displayImage(blurred)    }}api.fetchImageObservable(url)    .subscribeOn(Schedulers.io()    .observeOn(Schedulers.computation())    .map { blurImageSync(it) }    .observeOn(AndroidSchedulers.mainThread())    .subscribe { displayImage(it) }


./gradlew -Pandroid.enableJetifier=false canIDropJetifier
@JvmOverloads.

override fun onCreate(savedInstanceState: Bundle?) {    super.onCreate(savedInstanceState    launch(Dispatchers.Main) {        log("A")    }     log("B")}
true если выполнение должно продолжиться на другом потоке. Большинство CoroutineDispatcher возвращают true. Но для Dispatchers.Main потока будет эффективнее исполнять код сразу же если запуск корутины происходит с Main потока.
class SampleActivity : Activity() {  override fun onCreate(savedState: Bundle?) { super.onCreate(savedState) setContentView(R.layout.activity_leak) button.setOnClickListener { startAsyncWork() } }  private fun startAsyncWork() { val work = Runnable { SystemClock.sleep(20000) } Thread(work).start() }}
private static final String TAG = "MyClass";// orprivate static final String TAG =    MyClass.class.getSimpleName();MyClass.class.getSimpleName() всегда будет возвращать одно и тоже значение - "MyClass". Фактически в оптимизированном байткоде можно делать подмену выполнения метода на простую строку. Важно понимать что это не работает для случая getClass().getSimpleName(), т.е. когда класс получается динамически.LOG_TAG для ваших логов 🎉


dependencies { def work_version = 1.0.0 // Java implementation"android.arch.work:work-runtime:$work_version" // Kotlin KTX + coroutines implementation "android.arch.work:work-runtime-ktx:$work_version"}class MyWorker(ctx: Context,params: WorkerParameters): Worker(ctx, params) {    override fun WorkerResult doWork() {        //do the work you want done in the background        return Result.success()     }}  val constraints: Constraints = Constraints.Builder().setRequiresCharging(true).setRequiredNetworkType(NetworkType.CONNECTED).build()val myWork = OneTimeWorkRequestBuilder<MyWorker>().setConstraints(constraints).build()WorkManager.getInstance().enqueue(myWork)