
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)