Arsip Catatan Rilis Komponen Arsitektur

15 Januari 2019

WorkManager

WorkManager 1.0.0-beta02 dirilis. Rilis ini berisi beberapa perbaikan bug.

Perbaikan Bug

  • Memperbaiki masalah ekstrem yang menyebabkan pekerjaan berkala dapat berjalan lebih dari satu kali per interval di perangkat yang menjalankan Android 6.0 (API level 23). b/121998363
  • Memperbaiki ConcurrentModificationException di perangkat yang menjalankan Android 5.1 (API level 22) atau yang lebih lama. b/121345393
  • Memperbaiki eksekusi pekerjaan yang salah saat Batasan tidak tercapai di perangkat yang menjalankan Android 5.1 (API level 22) atau yang lebih lama. b/122578012
  • Mengoptimalkan penanganan penyelesaian pekerjaan agar menjadi lebih cepat pada beberapa kasus ekstrem. b/122358129
  • Menambahkan perubahan untuk mengatasi potensi kondisi race di antara beberapa instance LiveData yang digunakan WorkManager.
  • Beralih untuk menggunakan dependensi Room 1.1.1 dan bukan 1.1.1-rc01; kedua versi ini identik. b/122578011

19 Desember 2018

WorkManager

WorkManager 1.0.0-beta01 dirilis. Rilis ini tidak berisi perubahan API; ke depannya, WorkManager diharapkan tetap stabil terhadap API hingga versi berikutnya kecuali jika ada masalah genting. Rilis ini berisi beberapa perbaikan bug.

Perbaikan Bug

  • Turunan yang sebelumnya dibatalkan dari pekerjaan induk yang berhasil diselesaikan tidak akan dijalankan lagi. b/120811767
  • Class logging diinisialisasi dengan benar (terutama muncul selama pengujian).

18 Desember 2018

Navigation 1.0.0-alpha09 dirilis. Rilis ini berisi perubahan API yang dapat menyebabkan gangguan; harap lihat bagian Perubahan yang Dapat Menyebabkan Gangguan di bawah.

Kami memilih untuk tidak melanjutkan pengembangan artefak android.arch.navigation:navigation-testing. Meskipun terbukti bermanfaat untuk pengujian internal NavController, kami sangat merekomendasikan strategi pengujian alternatif, seperti membuat tiruan instance NavController untuk memastikan bahwa panggilan navigate() yang benar sudah dilakukan. Pendekatan ini dibahas secara mendetail dalam topik Single Activity di AndroidDevSummit 2018 dan kami akan menyusun dokumentasi tambahan secara khusus mengenai pengujian dengan Navigation.

Fitur Baru

  • MenuItem dengan menuCategory="secondary" tidak akan lagi menampilkan data sebelumnya saat digunakan dengan metode NavigationUI. b/120104424
  • AppBarConfiguration kini memungkinkan Anda menetapkan instance OnNavigateUpListener penggantian yang akan dipanggil saat navController.navigateUp() menampilkan false. b/79993862 b/120690961

Perubahan yang Dapat Menyebabkan Gangguan

  • Saat menggunakan <argument> dengan argType="reference", Navigation tidak lagi mengurai referensi, tetapi akan memberikan ID resource mentahnya. b/111736515
  • onNavDestinationSelected() sekarang akan muncul kembali ke tujuan awal grafik navigasi Anda secara default, sehingga konsisten dengan metode setup. Tambahkan menuCategory="secondary" ke MenuItem untuk menghindari munculnya data sebelumnya. aosp/852869
  • Metode fromBundle() dari class Args yang dihasilkan kini menggunakan Bundle non-null, bukan Bundle nullable aosp/845616

Perbaikan Bug

  • Argumen kini diurai dengan benar dari deep link sebagai argType yang tepat, bukan selalu sebagai string b/110273284
  • Navigation sekarang mengekspor resource publiknya dengan benar b/121059552
  • Safe Args kini kompatibel dengan Plugin Android Gradle 3.4 Canary 4 dan yang lebih baru b/119662045

12 Desember 2018

WorkManager

WorkManager 1.0.0-alpha13 dirilis. Rilis ini berisi perubahan minor pada API yang akan berguna bagi sebagian pengguna Kotlin.

Perubahan API

  • androidx.work.Result telah dipindahkan agar menjadi class dalam di ListenableWorker. Hal ini mencegah masalah pemfaktoran ulang dengan class level atas Kotlin, Result. Perubahan API ini dapat menyebabkan gangguan. b/120564418

Perubahan API yang Dapat Menyebabkan Gangguan

  • androidx.work.Result telah dipindahkan agar menjadi class dalam di ListenableWorker.

6 Desember 2018

Paging

Paging 2.1.0-rc01 dirilis tanpa perubahan dari versi 2.1.0-beta01.

Navigation 1.0.0-alpha08 dirilis. Rilis ini berisi perubahan API yang dapat menyebabkan gangguan; harap lihat bagian Perubahan yang Dapat Menyebabkan Gangguan di bawah.

Fitur Baru

  • Label tujuan, jika digunakan dengan metode NavigationUI, sekarang akan otomatis mengganti instance {argName} dalam android:label Anda dengan argumen yang benar b/80267266
  • Navigation sekarang bergantung pada Support Library 28.0.0 b/120293333

Perubahan yang Dapat Menyebabkan Gangguan

  • OnNavigatedListener telah diganti namanya menjadi OnDestinationChangedListener b/118670572
  • OnDestinationChangedListener sekarang juga meneruskan Bundle argumen aosp/837142
  • Atribut app:clearTask dan app:launchDocument serta metode terkaitnya telah dihapus. Gunakan app:popUpTo dengan root grafik untuk menghapus semua tujuan dari data sebelumnya. b/119628354
  • ActivityNavigator.Extras sekarang menggunakan pola Builder dan menambahkan kemampuan untuk menetapkan flag Intent.FLAG_ACTIVITY_ apa pun aosp/828140
  • NavController.onHandleDeepLink telah diubah namanya menjadi handleDeepLink aosp/836063
  • Sebagian class dan metode yang tidak dimaksudkan untuk pembuatan subclass, seperti NavOptions, NavInflater, NavDeepLinkBuilder, dan AppBarConfiguration, telah dijadikan final aosp/835681
  • Metode NavHostFragment.setGraph() yang tidak digunakan lagi telah dihapus aosp/835684
  • Metode NavigationUI.navigateUp(DrawerLayout, NavController) yang tidak digunakan lagi telah dihapus. aosp/835684
  • Pembuatan Fragment telah dipindahkan ke FragmentNavigator, memudahkan penetapan delegasi pembuatan Fragment ke FragmentFactory. b/119054429
  • Konstruktor untuk NavGraphNavigator tidak lagi menggunakan Context aosp/835340
  • NavigatorProvider sekarang merupakan class, bukan antarmuka. NavigatorProvider yang ditampilkan oleh getNavigatorProvider() tidak berubah fungsinya. aosp/830660
  • NavDestination.navigate() telah dihapus. Sekarang, Anda dapat memanggil navigate() di Navigator. aosp/830663
  • Pemfaktoran ulang Navigator secara signifikan, yang meniadakan kebutuhan akan OnNavigatorNavigatedListener dan meminta navigate menampilkan NavDestination yang menjadi tujuan navigasi.
  • Instance Navigator tidak dapat lagi mengirimkan peristiwa kemunculan ke NavController. Sebaiknya gunakan OnBackPressedCallback untuk mengintersep penekanan tombol kembali dan memanggil navController.popBackStack(). aosp/833716

Perbaikan Bug

  • popUpTo sekarang berfungsi secara konsisten saat tujuannya adalah elemen <navigation> b/116831650
  • Memperbaiki sejumlah bug yang mengakibatkan IllegalArgumentException saat menggunakan grafik bertingkat b/118713731 b/113611083 b/113346925 b/113305559
  • Atribut dataPattern tujuan <activity> sekarang akan mengisi argumen dari argumen non-String dengan memanggil toString() b/120161365

Safe Args

  • Safe Args mendukung Objek yang dapat diserialisasi, termasuk nilai Enum. Jenis Enum dapat menetapkan nilai default menggunakan literal enum tanpa nama class (misalnya app:defaultValue="READ") b/111316353
  • Safe Args mendukung array dari semua jenis yang didukung b/111487504
  • Safe Args sekarang mengabaikan subfolder direktori resource b/117893516
  • Safe Args menambahkan anotasi @Override jika sesuai b/117145301

5 Desember 2018

WorkManager

WorkManager 1.0.0-alpha12 dirilis. Rilis ini berisi beberapa perubahan API yang dapat menyebabkan gangguan; lihat bagian Perubahan API yang Dapat Menyebabkan Gangguan di bawah. Versi ini kemungkinan akan dirilis sebagai versi beta pertama kami. alpha12 juga berisi pembaruan dokumentasi yang lengkap.

Perubahan API

  • Artefak baru, work-rxjava2, memperkenalkan RxWorker. Ini adalah ListenableWorker yang mengharapkan Single<Payload>.
  • Dukungan untuk Firebase JobDispatcher telah dihapus karena tidak akan digunakan lagi dalam waktu dekat. Artinya, artefak work-firebase tidak akan lagi diupdate selagi kami beralih ke versi beta. Kami akan mempertimbangkan untuk menambahkan suatu alternatif di masa mendatang.
  • Menggabungkan Payload ke dalam Result. Result kini menjadi "class terkunci" dengan tiga penerapan konkret, yang dapat Anda peroleh melalui Result.success() (atau Result.success(Data)), Result.failure() (atau Result.failure(Data)), dan Result.retry(). ListenableFuture kini akan menampilkan Result, bukan Payload. Worker tidak memiliki metode pengambil dan penyetel untuk Data output. Perubahan ini dapat menyebabkan gangguan.
  • Menambahkan Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) dan Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) serta varian untuk mendukung URI konten pemicu yang lambat dengan lebih baik. b/119919774
  • Menambahkan varian WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration). Metode ini memerlukan API 26.
  • Menambahkan metode ekstensi Kotlin Operation.await() dan ListenableFuture.await().
  • Mengganti nama Operation.getException() menjadi Operation.getThrowable(). Perubahan ini dapat menyebabkan gangguan.
  • Class ContentUriTriggers dan metode yang mereferensikannya tidak lagi tersedia untuk penggunaan publik. Perubahan ini dapat menyebabkan gangguan.
  • Menghapus metode vararg yang tersisa di WorkManager, WorkContinuation, dan OneTimeWorkRequest untuk menyederhanakan API. Untuk memperbaiki masalah build, Anda dapat menggabungkan vararg yang ada dengan Arrays.asList(...). Kami masih menyertakan versi argumen tunggal dari masing-masing metode. Perubahan ini dapat menyebabkan gangguan.
  • Menghapus varian WorkContinuation.combine(OneTimeWorkRequest, *). Varian tersebut memberikan API yang membingungkan; metode combine yang ada dapat lebih mudah dipahami. Perubahan ini dapat menyebabkan gangguan.

Perbaikan Bug

  • Implementasi pra-Marshmallow sekarang lebih dapat diandalkan dalam pemulihan dari penghentian proses pekerjaan yang sudah dieksekusi.
  • LiveData yang diamati melalui observeForever dilacak melalui WorkManager. Perbaikan ini merupakan backport dari perbaikan library Room. b/74477406
  • Data.Builder.build() kini menampilkan pengecualian jika objek yang diserialisasi melebihi ukuran maksimumnya. Sebelumnya, pengecualian hanya terjadi pada thread latar belakang yang tidak dapat Anda tangani dengan baik.
  • Pekerjaan yang dihentikan vs dibatalkan kini dibedakan dengan lebih baik; getWorkInfoById() akan menampilkan WorkInfo dengan State CANCELLED selama ListenableWorker.onStopped().
  • Memperlakukan Result null sebagai kegagalan di ListenableWorker. b/120362353
  • Perbaikan spekulatif untuk Tablet Shield yang menjalankan API 24 yang terkadang menampilkan IllegalArgumentException. b/119484416

Perubahan API yang Dapat Menyebabkan Gangguan

  • Dukungan untuk Firebase JobDispatcher telah dihapus karena tidak akan digunakan lagi dalam waktu dekat. Artinya, artefak work-firebase tidak akan lagi diupdate selagi kami beralih ke versi beta. Kami akan mempertimbangkan untuk menambahkan suatu alternatif di masa mendatang.
  • Menggabungkan Payload ke dalam Result. Result kini menjadi "class terkunci" dengan tiga penerapan konkret, yang dapat Anda peroleh melalui Result.success() (atau Result.success(Data)), Result.failure() (atau Result.failure(Data)), dan Result.retry(). ListenableFuture kini akan menampilkan Result, bukan Payload. Worker tidak memiliki metode pengambil dan penyetel untuk Data output.
  • Menambahkan metode ekstensi Kotlin Operation.await() dan ListenableFuture.await().
  • Mengganti nama Operation.getException() menjadi Operation.getThrowable().
  • Class ContentUriTriggers dan metode yang mereferensikannya tidak lagi tersedia untuk penggunaan publik.
  • Menghapus metode vararg yang tersisa di WorkManager, WorkContinuation, dan OneTimeWorkRequest untuk menyederhanakan API. Untuk memperbaiki masalah build, Anda dapat menggabungkan vararg yang ada dengan Arrays.asList(...). Kami masih menyertakan versi argumen tunggal dari masing-masing metode.
  • Menghapus varian WorkContinuation.combine(OneTimeWorkRequest, *). Varian tersebut memberikan API yang membingungkan; metode combine yang ada dapat lebih mudah dipahami.

4 Desember 2018

Room

Room 2.1.0-alpha03 dirilis dengan dukungan coroutines dan beberapa perbaikan bug.

Perubahan API

  • FTS tokenizer dalam @Fts3/@Fts4 sekarang menggunakan String, bukan Enum. Ini memungkinkan penggunaan tokenizer kustom di Room. Tokenizer bawaan tetap ditentukan di FtsOptions sebagai konstanta string. b/119234881

Fitur Baru

  • Couroutine: Metode DAO sekarang dapat berupa fungsi penangguhan. Untuk mendukung fungsi penangguhan di Room, artefak baru, room-coroutines, dirilis. b/69474692
  • Metode DAO yang dianotasi dengan @Insert, @Delete, atau @Update sekarang mendukung ListenableFuture sebagai jenis nilai yang ditampilkan. b/119418331

Perbaikan Bug

  • Memperbaiki bug saat Room salah mencoba untuk menemukan konstruktor dengan kolom dalam properti ignoredColumns untuk @Entity. b/119830714
  • Memperbaiki bug yang menyebabkan Room tidak menandai parameter metode DAO sebagai final dalam implementasi yang dihasilkan. b/118015483
  • Memperbaiki bug yang menyebabkan prosesor Room tidak bekerja saat melaporkan error pada kueri yang memuat simbol khusus. b/119520136
  • Memperbaiki bug yang menyebabkan Room menolak berbagai implementasi Collection lain sebagai argumen ekspresi IN. b/119884035
  • Memperbaiki bug yang menyebabkan LiveData hasil Room mendapatkan pembersihan sampah memori saat diamati selamanya sehingga tidak lagi memberikan data baru. b/74477406
  • Mengupdate close lock RoomDatabase untuk mengurangi pertentangan kunci. b/117900450

8 November 2018

WorkManager

WorkManager 1.0.0-alpha11 dirilis. Rilis ini berisi banyak perubahan yang akan menjadi API stabil saat beta. Ada sejumlah perubahan API yang dapat menyebabkan gangguan dalam rilis ini; lihat bagian Perubahan API yang Dapat Menyebabkan Gangguan di bawah.

Perubahan API

  • work-runtime-ktx memperkenalkan CoroutineWorker baru.
  • WorkStatus diganti namanya menjadi WorkInfo. Semua varian metode getStatus yang sesuai telah diganti namanya menjadi varian getWorkInfo yang sesuai. Perubahan ini dapat menyebabkan gangguan.
  • ListenableWorker.onStopped() tidak lagi menerima argumen boolean jika WorkRequest dibatalkan. WorkManager tidak lagi membuat pembedaan ini. Perubahan ini dapat menyebabkan gangguan.
  • Paket androidx.work.test telah diganti namanya menjadi paket androidx.work.testing. Perubahan ini dapat menyebabkan gangguan.
  • Penyetel di Constraints tidak lagi menjadi bagian dari API publik. Perubahan ini dapat menyebabkan gangguan.
  • WorkerParameters.getTriggeredContentUris() dan WorkerParameters.getTriggeredContentAuthorities() sebelumnya menampilkan array. Sekarang, metode ini menampilkan Collections. Perubahan ini dapat menyebabkan gangguan.
  • ListenableWorker.onStartWork() diganti namanya menjadi ListenableWorker.startWork(). Perubahan ini dapat menyebabkan gangguan.
  • Konstruktor untuk WorkStatus tidak lagi menjadi bagian dari API publik. Perubahan ini dapat menyebabkan gangguan.
  • Configuration.getMaxJobSchedulerID() dan Configuration.getMinJobSchedulerID() secara berurutan diganti namanya menjadi Configuration.getMinJobSchedulerId() dan Configuration.getMaxJobSchedulerId(). Perubahan ini dapat menyebabkan gangguan.
  • Menambahkan banyak anotasi @NonNull ke API publik untuk meningkatkan ergonomi API.
  • Menambahkan WorkManager.enqueueUniqueWork() API untuk mengantrekan OneTimeWorkRequest yang unik tanpa harus membuat WorkContinuation.
  • Semua varian metode enqueue dan cancel pada WorkManager kini menampilkan jenis Operation baru. Perubahan ini dapat menyebabkan gangguan.
  • Semua varian enqueue tidak lagi menerima vararg untuk WorkRequest. Perubahan ini dapat menyebabkan gangguan. Sebagai gantinya, gunakan Collections. Anda dapat menggunakan Arrays.asList() untuk mengubah kode yang sudah ada. Kami melakukan ini untuk mengurangi antarmuka API dan jumlah metode.
  • Mencoba untuk melakukan initialize pada WorkManager lebih dari sekali per proses kini akan menampilkan IllegalStateException. Perubahan ini dapat menyebabkan gangguan.

Perbaikan Bug

  • WorkRequest.Builder dalam artefak work-runtime-ktx kini menggunakan ListenableWorker. Perbaikan b/117666259
  • Pastikan waktu percobaan berikutnya untuk PeriodicWork ditetapkan ke masa mendatang. Perbaikan b/118204399
  • Menghapus disk I/O potensial ketika menggunakan WorkManager saat memulai aplikasi. Perbaikan b/117796731
  • Memperbaiki kondisi race di WorkConstraintsTracker. Memperbaiki android-workmanager/issues/56

Perubahan API yang Dapat Menyebabkan Gangguan

  • WorkStatus diganti namanya menjadi WorkInfo. Semua varian metode getStatus yang sesuai telah diganti namanya menjadi varian getWorkInfo yang sesuai.
  • ListenableWorker.onStopped() tidak lagi menerima argumen boolean jika WorkRequest dibatalkan. WorkManager tidak lagi membuat pembedaan ini.
  • Paket androidx.work.test telah diganti namanya menjadi paket androidx.work.testing.
  • Penyetel di Constraints tidak lagi menjadi bagian dari API publik.
  • WorkerParameters.getTriggeredContentUris() dan WorkerParameters.getTriggeredContentAuthorities() sebelumnya menampilkan array. Sekarang, metode ini menampilkan Collections.
  • ListenableWorker.onStartWork() diganti namanya menjadi ListenableWorker.startWork().
  • Konstruktor untuk WorkStatus tidak lagi menjadi bagian dari API publik.
  • Configuration.getMaxJobSchedulerID() dan Configuration.getMinJobSchedulerID() secara berurutan diganti namanya menjadi Configuration.getMinJobSchedulerId() dan Configuration.getMaxJobSchedulerId().
  • Semua varian metode enqueue dan cancel di WorkManager sekarang menampilkan jenis Operation baru.
  • Semua varian enqueue tidak lagi menerima vararg untuk WorkRequest.
  • Mencoba untuk melakukan initialize WorkManager lebih dari sekali per proses kini akan menampilkan IllegalStateException.

1 November 2018

Paging

Paging 2.1.0-beta01 dirilis tanpa perubahan dari versi 2.1.0-alpha01.

30 Oktober 2018

Room

Room 2.1.0-alpha02 dirilis dengan beberapa perbaikan bug dan fitur baru.

Fitur Baru

  • Menambahkan dukungan untuk mereferensikan @DatabaseView dalam @Relation. b/117680932

Perbaikan Bug

  • Memperbaiki bug yang menyebabkan Room menjalankan I/O disk di thread utama saat berlangganan dan berhenti berlangganan jenis nilai Rx yang ditampilkan. b/117201279
  • Memperbaiki bug yang menyebabkan Room gagal menemukan pengonversi jenis yang sesuai untuk kolom dalam class entity Kotlin. b/111404868
  • Memperbaiki bug yang menyebabkan Room menghasilkan kode yang salah untuk implementasi antarmuka DAO yang berisi metode default Kotlin yang tidak memiliki argumen. b/117527454
  • Mengupdate parser tata bahasa SQLite Room, memperbaiki masalah performa yang menyebabkan waktu build lama. b/117401230

29 Oktober 2018

Navigation 1.0.0-alpha07 dirilis dengan perbaikan bug dan perubahan API.

Fitur Baru

Perubahan yang Dapat Menyebabkan Gangguan

  • Modul navigation-testing-ktx telah dikemas ke dalam navigation-testing artifact dan tidak akan dipublikasikan lagi.
  • Artefak navigation-testing kini memiliki dependensi pada library standar Kotlin. API telah diubah agar lebih konsisten dengan konvensi Kotlin, tetapi Anda dapat terus menggunakannya untuk pengujian aplikasi yang ditulis dalam Java.
  • Grafik navigasi terdaftar manifes metadata tidak lagi didukung. b/118355937
  • Tindakan tidak dapat lagi ditambahkan ke tujuan <activity>. aosp/785539

Perbaikan Bug

  • Deep link kini akan mengurai parameter kueri dengan benar. b/110057514
  • Tujuan Activity sekarang menerapkan semua animasi masuk dan keluar dengan benar. b/117145284
  • Memperbaiki masalah yang terjadi setelah perubahan konfigurasi saat menggunakan Navigator kustom. b/110763345

Safe Args

  • Safe Args sekarang memiliki dependensi tetap pada Plugin Android Gradle 3.2.1. b/113167627
  • Directions kini dapat dibuat untuk class internal. b/117407555
  • Memperbaiki masalah terkait pembuatan Directions ke grafik <include>. b/116542123

12 Oktober 2018

Paging

Paging 2.1.0-alpha01 dirilis dengan dua tambahan utama - page dropping, dan library ekstensi KTX untuk setiap artefak - selain beberapa perubahan API dan perbaikan bug lainnya.

Perubahan API

  • Penambahan PagedList.Config.Builder.setMaxSize() untuk membatasi jumlah item yang dimuat dalam memori.
  • Penambahan androidx.paging.Config() sebagai alternatif Kotlin untuk PagedList.Config.Builder
  • Penambahan androidx.paging.PagedList() sebagai alternatif Kotlin untuk PagedList.Builder
  • Penambahan DataSourceFactory.toLiveData() sebagai alternatif Kotlin untuk LivePagedListBuilder
  • Penambahan DataSourceFactory.toObservable() dan toFlowable() sebagai alternatif Kotlin untuk RxPagedListBuilder
  • Penambahan AsyncPagedListDiffer.addPagedListListener() untuk memantau kapan PagedList ditukar. b/111698609
  • Penambahan varian PagedListAdapter.onCurrentListChanged() yang meneruskan daftar lama dan baru; varian sebelumnya tidak digunakan lagi.
  • Penambahan varian PagedListAdapter/AsyncPagedListDiffer.submitList() yang mengambil callback tambahan yang terpicu jika/ketika pagedlist ditampilkan, setelah diffing. Hal ini memungkinkan Anda untuk menyinkronkan pertukaran PagedList dengan update UI lainnya. b/73781068
  • Penambahan PagedList.getLoadedCount() untuk memberitahukan jumlah item dalam memori. Perlu diketahui bahwa nilai yang ditampilkan akan selalu sama dengan .size() jika placeholder dinonaktifkan.

Perbaikan Bug

  • Memperbaiki kondisi race saat melakukan diffing jika daftar digunakan kembali b/111591017
  • PagedList.loadAround() sekarang menampilkan IndexOutOfBoundsException jika indeks tidak valid. Sebelumnya, masalah dapat terjadi dengan pengecualian lain yang tidak jelas.
  • Memperbaiki masalah ketika ukuran pemuatan awal yang sangat kecil dan data yang tidak berubah berpotensi menghentikan pemuatan lebih lanjut. b/113122599

11 Oktober 2018

WorkManager

WorkManager 1.0.0-alpha10 dirilis dengan dukungan untuk pekerjaan asinkron yang dikendalikan developer. Ada sejumlah perubahan API yang dapat menyebabkan gangguan dalam rilis ini; lihat bagian Perubahan API yang Dapat Menyebabkan Gangguan di bawah.

WorkManager sedang memasuki fase akhir periode alfa. Kami berharap WorkManager menjadi API stabil dalam versi beta, jadi harap luangkan waktu untuk mengirimkan masukan Anda pada issue tracker kami.

Perubahan API

  • Menghapus semua metode dan class yang sebelumnya deprecated, terutama konstruktor Worker default. Perubahan API ini dapat menyebabkan gangguan.
  • Mengganti nama NonBlockingWorker menjadi ListenableWorker, yang sekarang merupakan class publik yang tidak tersembunyi dan siap digunakan.
    • ListenableWorker menyediakan akses ke satu metode abstrak, ListenableFuture<Payload> onStartWork(), yang dipanggil pada thread utama. Anda dapat menentukan untuk memulai dan memproses pekerjaan secara asinkron. Setelah selesai, Anda harus mengupdate ListenableFuture sesuai hasilnya. Penerapan referensi ListenableFuture disediakan dalam paket Futures di alpha02 (lihat di bawah pada bagian WorkManager).
    • Worker memperluas ListenableWorker dan masih beroperasi seperti sebelumnya, dengan metode Result doWork() abstrak.
    • Mengacak beberapa metode dan anggota dari Worker ke ListenableWorker.
    • Kami akan segera menyediakan penerapan referensi untuk ListenableWorker yang menggunakan coroutine Kotlin (setelah versi stabil dirilis) dan RxJava2.
  • Antarmuka WorkerFactory dan penerapan konkret DefaultWorkerFactory telah digabungkan menjadi class abstrak yang disebut WorkerFactory. Penerapan ini memastikan bahwa perilaku berbasis refleksi default dipanggil sebagai upaya terakhir untuk setiap instance WorkerFactory yang dibuat pengguna. Perubahan ini dapat menyebabkan gangguan.
  • Menghapus WorkManager.synchronous() dan WorkContinuation.synchronous() serta semua metode yang terkait. Menambahkan ListenableFuture<Void> sebagai jenis nilai yang ditampilkan dari banyak metode dalam API. Perubahan API ini dapat menyebabkan gangguan.
    • Anda kini dapat melakukan perolehan dan pengamatan secara sinkron menggunakan ListenableFuture. Misalnya, WorkManager.enqueue() sebelumnya digunakan untuk menampilkan void, tetapi sekarang akan menampilkan ListenableFuture<Void>. Anda dapat memanggil ListenableFuture.addListener(Runnable, Executor) atau ListenableFuture.get() untuk menjalankan kode setelah operasi selesai.
    • Perlu diketahui bahwa ListenableFuture ini tidak memberi tahu Anda apakah operasi berhasil atau gagal; hanya memberi tahu bahwa operasi selesai. Anda masih perlu merangkai metode WorkManager untuk mencari tahu informasi ini.
    • Kami mengabaikan panggilan cancel() pada objek ini, karena membingungkan dan sulit untuk dibahas (Anda membatalkan operasi atau pekerjaan yang ditimbulkan?). Hal ini terjadi dalam kontrak Future.
    • Untuk mempertahankan kesamaan dengan metode getStatus* sinkron, kami menyediakan varian ListenableFuture, dan mengganti nama saat ini yang menampilkan LiveData agar secara eksplisit memiliki "LiveData" sebagai bagian dari nama tersebut (misalnya, getStatusesByIdLiveData(UUID)). Perubahan API ini dapat menyebabkan gangguan.

Perbaikan Bug

  • Memperbaiki masalah umum dari alpha09 terkait file androidx-annotations.pro duplikat. Anda dapat menghilangkan solusi ini dari catatan rilis sebelumnya dengan menghapus exclude 'META-INF/proguard/androidx-annotations.pro' dari file gradle.
  • Menambahkan konfigurasi proguard untuk mempertahankan konstruktor Worker baru. b/116296569
  • Memperbaiki potensi NullPointerException dalam kondisi race saat REPLACE dilakukan pada pekerjaan. b/116253486 dan b/116677275
  • WorkContinuation.combine() sekarang menerima satu WorkContinuation atau lebih, bukan dua atau lebih. b/117266752

Perubahan API yang Dapat Menyebabkan Gangguan

  • Menghapus semua metode dan class yang sebelumnya deprecated, terutama konstruktor Worker default.
  • Antarmuka WorkerFactory dan penerapan konkret DefaultWorkerFactory telah digabungkan menjadi class abstrak yang disebut WorkerFactory.
  • Menghapus WorkManager.synchronous() dan WorkContinuation.synchronous().
  • Metode WorkManager.getStatus*() sekarang menampilkan ListenableFuture. WorkManager.getStatus*LiveData() menampilkan LiveData.

Futures

Futures 1.0.0-alpha02 dirilis.

Perubahan API

  • Developer kini dapat menggunakan ResolvableFuture dan AbstractResolvableFuture sebagai implementasi ringan dan konkret dari ListenableFuture.

8 Oktober 2018

Room

Room 2.1.0-alpha01 dirilis.

Fitur Baru

  • FTS: Room sekarang mendukung entity dengan tabel pemetaan FTS3 atau FTS4 . Class yang dianotasi dengan @Entity sekarang juga dapat dianotasi dengan @Fts3 atau @Fts4 untuk mendeklarasikan class dengan tabel penelusuran teks lengkap pemetaan. Opsi FTS untuk penyesuaian lebih lanjut tersedia melalui metode anotasi. b/62356416
  • View: Sekarang Room mendukung deklarasi class sebagai kueri tersimpan, yang disebut juga view, menggunakan anotasi @DatabaseView. b/67033276
  • Nilai Otomatis: Room kini mendukung deklarasi class beranotasi AutoValue sebagai entity dan POJO. Anotasi Room @PrimaryKey, @ColumnInfo, @Embedded, dan @Relation sekarang dapat dideklarasikan dalam metode abstrak milik class yang dianotasikan nilai otomatis. Pastikan anotasi ini juga harus disertai dengan @CopyAnnotations agar Room dapat memahaminya dengan baik. b/62408420
  • Dukungan Tambahan untuk Jenis Nilai yang Ditampilkan RX: Metode DAO yang dianotasi dengan @Insert, @Delete, atau @Update sekarang mendukung jenis nilai yang ditampilkan Rx Completable, Single<T>, dan Maybe<T>. b/63317956
  • Jenis yang Tidak Dapat Diubah dengan @Relation: Sebelumnya, Room memerlukan kolom beranotasi @Relation dapat disetel, tetapi sekarang kolom tersebut dapat berupa parameter konstruktor.
  • enableMultiInstanceInvalidation: Adalah API baru di RoomDatabase.Builder untuk mengaktifkan pembatalan di berbagai instance RoomDatabase yang menggunakan file database yang sama. Mekanisme pembatalan multi-instance ini juga berlaku pada banyak proses. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: Adalah API baru di RoomDatabase.Builder untuk otomatis membuat ulang database jika terjadi downgrade. b/110416954
  • ignoredColumns: Adalah API baru dalam anotasi @Entity yang dapat digunakan untuk membuat daftar kolom yang diabaikan menurut namanya. Berguna untuk mengabaikan kolom turunan pada suatu entity. b/63522075

Perubahan API/Perilaku

  • mCallback dan mDatabase di RoomDatabase sekarang @Deprecated dan akan dihapus pada Room versi utama mendatang. b/76109329

Perbaikan Bug

  • Memperbaiki dua masalah saat Room tidak dapat pulih dengan baik dari database yang rusak atau migrasi yang bermasalah selama inisialisasi. b/111504749 dan b/111519144
  • Sekarang Room akan menggunakan dengan tepat konstruktor utama Kotlin dalam class data, sehingga menghindari perlunya mendeklarasikan kolom sebagai vars. b/105769985

1 Oktober 2018

Room 2.0.0 dirilis tanpa perubahan dari versi 2.0.0-rc01. Paging 2.0.0 dirilis dengan satu perbaikan bug.

Paging

Perbaikan Bug

  • Memperbaiki error yang dapat terjadi pada scroll yang sangat cepat menggunakan PositionalDataSource dan placeholder b/114635383.

21 September 2018

Lifecycle 2.0.0 dirilis dengan satu perbaikan bug dari 2.0.0-rc01 dalam ViewModel.

Lifecycle

Perbaikan Bug

  • Memperbaiki aturan proguard ViewModel yang salah menghapus konstruktor b/112230489

20 September 2018

Navigation 1.0.0-alpha06 dirilis dengan perbaikan bug dan perubahan API.

Fitur Baru

Perubahan API

  • Perubahan yang Dapat Menyebabkan Gangguan: Metode navigate() Navigator kini menggunakan parameter Navigator.Extras.
  • Metode getGraph() NavController sekarang adalah NonNull b/112243286

Perbaikan Bug

  • NavigationUI.setupWithNavController() tidak lagi membocorkan tampilan jika digunakan dengan tampilan dari tujuan individu b/111961977
  • onSaveState() navigator sekarang hanya dipanggil satu kali b/112627079

Safe Args

  • Class Directions tujuan Navigation kini memperluas class Directions induknya jika ada. b/79871405
  • Class Directions dan Args kini memiliki implementasi toString() yang berguna. b/111843389

19 September 2018

WorkManager

WorkManager 1.0.0-alpha09 dirilis dengan perbaikan bug, pembaruan infrastruktur, dan perubahan API.

Masalah Umum

Jika Anda mengalami masalah berikut: "Lebih dari satu file ditemukan dengan jalur independen OS 'META-INF/proguard/androidx-annotations.pro'", harap cantumkan berikut ini dalam file gradle sebagai solusi sementara selagi kami memperbaiki masalah di alpha10:

Groovy

android {
    packagingOptions {
        exclude 'META-INF/proguard/androidx-annotations.pro'
    }
}

Kotlin

android {
    packagingOptions {
        exclude("META-INF/proguard/androidx-annotations.pro")
    }
}

Perbaikan Bug

  • Menambahkan perbaikan lain yang diperlukan untuk error "100 jobs". b/115560696
  • Menambahkan beberapa perbaikan untuk error pembatas kunci asing karena kondisi race. b/114705286
  • Mendelegasikan panggilan ConstraintTrackingWorker.onStopped(boolean) ke Worker yang mendasarinya. b/114125093
  • Menerapkan penundaan backoff minimum yang benar untuk Firebase JobDispatcher. b/113304626
  • Meningkatkan jaminan threading internal ke library.
  • Memperbaiki potensi masalah dengan de-duplikasi LiveData secara internal.

Perubahan API

  • Anda kini dapat membuat instance Worker sendiri pada runtime dengan menetapkan WorkerFactory sebagai bagian dari WorkManager.Configuration. Factory untuk fallback adalah DefaultWorkerFactory, yang cocok dengan perilaku WorkManager versi sebelumnya.
    • Konstruktor default untuk Worker dan NonBlockingWorker kini ditandai sebagai tidak digunakan lagi. Harap gunakan konstruktor baru (Worker(Context, WorkerParameters)) dan panggil super(Context, WorkerParameters); versi WorkManager berikutnya akan menghapus konstruktor default tersebut.
  • Kami sudah mulai menggunakan artefak ListenableFuture yang baru secara internal (bebas dari dependensi Guava). Kami akan memperkenalkan ListenableFutures ke API dalam rilis mendatang. Perubahan ini akan mendukung proses diperlihatkannya NonBlockingWorker.
  • Menambahkan kemampuan untuk memicu pekerjaan yang dibatasi waktu di TestDriver melalui TestDriver.setInitialDelayMet(UUID) dan TestDriver.setPeriodDelayMet(UUID). b/113360060

Perubahan yang Dapat Menyebabkan Gangguan

  • Konstruktor default Worker dan NonBlockingWorker sudah tidak digunakan lagi. Silakan bermigrasi ke konstruktor baru sesegera mungkin. Versi yang akan datang akan menghapus konstruktor default.

27 Agustus 2018

WorkManager

WorkManager 1.0.0-alpha08 dirilis dengan perbaikan bug.

Perbaikan Bug

  • Melabeli dengan jelas komponen WorkManager sebagai tidak berbasis booting langsung, sehingga tidak diaktifkan selama booting langsung. Di masa mendatang, kami akan menyediakan versi WorkManager yang peka terhadap booting langsung. b/112665532
  • Memperbaiki masalah saat pekerjaan yang dicoba lagi tidak berjalan. b/112604021
  • Memperbaiki pekerjaan berkala yang tidak berjalan secara berulang (terkait dengan masalah di atas). b/112859683
  • Mengikuti kebijakan backoff saat proses aplikasi sudah berjalan.
  • Mengoreksi pesan pengecualian dalam Data untuk menunjukkan batas sebesar 10 KB.
  • Menurunkan nilai maksimum Configuration.setMaxSchedulerLimit(int) menjadi 50 untuk memperhitungkan latensi dalam penyelesaian pemrosesan JobScheduler. b/112817355

16 Agustus 2018

WorkManager

WorkManager 1.0.0-alpha07 dirilis dengan perbaikan bug dan perubahan kecil pada API.

Perbaikan Bug

  • Memperbaiki potensi kueri SQL dengan batas negatif yang dapat menampilkan jumlah hasil yang tidak terbatas.
  • Pekerjaan yang telah menyelesaikan eksekusi kini dapat dengan tepat membatalkan semua salinan tertunda dari pekerjaan tersebut di Penjadwal lainnya. Hal ini menyebabkan batas pekerjaan JobScheduler terlampaui. b/111569265
  • Memperbaiki ConcurrentModificationException dalam ConstraintTracker. b/112272753
  • Mengubah anotasi jenis nilai yang ditampilkan untuk Data.getBooleanArray(String) dan Data.getIntArray(String) menjadi @Nullable, bukan @NonNull. b/112275229

Perubahan API

  • Worker sekarang memperluas class baru, NonBlockingWorker. Perubahan ini tidak memengaruhi penggunaan saat ini. Di masa mendatang, NonBlockingWorker akan menjadi entity yang sepenuhnya didukung untuk solusi threading kustom.
  • Mengubah anotasi jenis nilai yang ditampilkan untuk Data.getBooleanArray(String) dan Data.getIntArray(String) menjadi @Nullable, bukan @NonNull. b/112275229
  • Ekstensi Kotlin: menghentikan Map.toWorkData() dan menambahkan workDataOf(vararg Pair<String, Any?>) level teratas agar lebih konsisten dengan API yang ada.

10 Agustus 2018

Navigation 1.0.0-alpha05 dirilis dengan perbaikan bug.

Perbaikan Bug

  • Memperbaiki bug yang menyebabkan perilaku data sebelumnya yang salah. b/111907708
  • Memperbaiki bug di equals() class Generated Args. b/111450897
  • Memperbaiki kegagalan pembuatan di Safe Args. b/109409713
  • Memperbaiki konversi dari pengenal resource ke nama java. b/111602491
  • Memperbaiki pesan error tentang nullability di plugin Safe Args.
  • Menambahkan anotasi nullability yang hilang.

6 Agustus 2018

Versi AndroidX dari Lifecycle, Room, dan Paging merilis versi 2.0.0-rc01. Semua artefak tidak berubah dari versi 2.0.0-beta01.

1 Agustus 2018

WorkManager

WorkManager 1.0.0-alpha06 dirilis dengan perbaikan bug.

Perbaikan Bug

  • Mencegah penguncian database saat menjadwalkan pekerjaan. b/111801342
  • Memperbaiki bug yang menyebabkan PeriodicWork tidak berjalan sesuai jadwal dalam mode Istirahatkan. b/111469837
  • Memperbaiki kondisi race saat melacak batasan yang menyebabkan WorkManager mengalami error. googlecodelabs/android-workmanager/issues/56
  • Membuat WorkRequest yang unik saat menggunakan WorkRequest.Builder#build(). b/111408337
  • Mengaktifkan penggunaan RescheduleReceiver hanya jika ada WorkRequest yang membutuhkannya. b/111765853

24 Juli 2018

WorkManager

WorkManager 1.0.0-alpha05 dirilis dengan perbaikan bug dan perubahan logging yang penting.

Perubahan API

  • WorkManager.getInstance() sekarang dianotasikan dengan @NonNull, bukan @Nullable. Namun, jika singleton tidak diinisialisasi dengan benar dalam kasus inisialisasi manual, metode ini akan menampilkan IllegalStateException. Ini adalah perubahan API yang dapat menyebabkan gangguan.
  • Menambahkan API baru, Configuration.Builder.setMinimumLoggingLevel(int), yang dapat mengontrol panjang WorkManager. Secara default, WorkManager mencatat Log.INFO dan di atasnya.
  • Mengubah tanda tangan Data.getString() sehingga tidak lagi menggunakan nilai default (secara implisit adalah null). Perubahan API ini dapat menyebabkan gangguan.
  • Menandai beberapa metode yang hanya diperlukan untuk penggunaan internal sebagai @hide. Proses ini mencakup konstruktor Constraints, Data.toByteArray(), dan Data.fromByteArray(byte[]). Perubahan API ini dapat menyebabkan gangguan.

Perbaikan Bug

  • WorkManager tidak lagi menjalankan pekerjaan selama kasus pencadangan otomatis yang diketahui. Ini dapat mengakibatkan error. b/110564377
  • Memperbaiki penjadwalan ganda PeriodicWorkRequest saat menggunakan JobScheduler. b/110798652
  • Memperbaiki masalah PeriodicWorkRequest yang tidak dijalankan dengan benar setelah perangkat beralih ke mode Istirahatkan. b/111469837
  • Memperbaiki masalah dengan penundaan awal saat menggunakan Firebase JobDispatcher. b/111141023
  • Memperbaiki beberapa potensi kondisi race dan masalah pengaturan waktu.
  • Membebaskan BroadcastReceiver yang tidak diperlukan lagi dengan benar.
  • Mengoptimalkan performa penjadwalan ulang saat aplikasi memulai ulang setelah ditutup paksa.
  • Mengizinkan TestScheduler.setAllConstraintsMet(UUID) untuk dipanggil sebelum atau sesudah mengantrekan WorkRequest yang ditentukan. b/111238024

Perubahan yang Dapat Menyebabkan Gangguan

  • WorkManager.getInstance() sekarang dianotasikan dengan @NonNull, bukan @Nullable.
  • Mengubah tanda tangan Data.getString() sehingga tidak lagi menggunakan nilai default (secara implisit adalah null).
  • Menandai beberapa metode yang hanya diperlukan untuk penggunaan internal sebagai @hide. Proses ini mencakup konstruktor Constraints, Data.toByteArray(), dan Data.fromByteArray(byte[]).

19 Juli 2018

Navigation 1.0.0-alpha04 dan plugin gradle Safe Args yang terkait berisi sejumlah perubahan API, perubahan perilaku, dan perbaikan bug.

Perubahan API/Perilaku

  • NavHostFragment akan selalu mengatur Fragment saat ini sebagai fragmen navigasi utama, memastikan bahwa pengelola fragmen turunan muncul sebelum NavController luar muncul b/111345778

Safe Args

  • Perubahan yang Dapat Menyebabkan Gangguan: app:type telah diubah menjadi app:argType untuk menghindari konflik dengan library lain seperti ConstraintLayout 2.0.0-alpha1 b/111110548
  • Pesan error dari Safe Args kini dapat diklik b/111534438
  • Class Args kini menegaskan bahwa atribut NonNull sebenarnya bukan null. b/111451769
  • Anotasi NonNull tambahan telah ditambahkan ke NavDirections dan class yang dihasilkan Args b/111455455 b/111455456

Perbaikan Bug

  • Memperbaiki masalah dengan tombol kembali di sistem setelah deep linking ke tujuan fragmen b/111515685

12 Juli 2018

Navigation 1.0.0-alpha03 dan plugin gradle Safe Args yang terkait berisi sejumlah perubahan API, perubahan perilaku, dan perbaikan bug.

Perubahan API/Perilaku

  • Metode NavigationUI.setupWithNavController untuk Toolbar telah ditambahkan b/109868820
  • Metode NavigationUI.setupWithNavController untuk CollapsingToolbarLayout telah ditambahkan b/110887183
  • popBackStack() sekarang menampilkan nilai salah ketika data sebelumnya kosong atau ketika ID tujuan yang diberikan tidak ada di data sebelumnya b/110893637
  • FragmentNavigator kini mengabaikan operasi navigasi setelah FragmentManager memiliki status tersimpan, yang menghindari pengecualian "Tidak dapat melakukan tindakan ini setelah onSaveInstanceState" b/110987825

Safe Args

  • Perubahan yang Dapat Menyebabkan Gangguan: Karakter non-alfanumerik dalam nama tindakan dan argumen akan diganti dengan CamelCase dalam nama metode NavDirections masing-masing
    • Misalnya DemoController.index akan menjadi setDemoControllerIndex b/79995048
    • Misalnya action_show_settings akan menjadi actionShowSettings b/79642240
  • Perubahan yang Dapat Menyebabkan Gangguan: Argumen kini dianggap non-null secara default. Untuk mengizinkan nilai null pada argumen string dan parcelable, tambahkan app:nullable="true"b/79642307
  • Sekarang Anda dapat menggunakan app:type="long" dengan defaultValues dalam format “123L” b/79563966
  • Argumen parcelable kini didukung, menggunakan nama class yang memenuhi syarat untuk app:type. Satu-satunya nilai default yang didukung adalah "@null"b/79563966
  • Class Args sekarang mengimplementasikan equals() dan hashCode() b/79642246
  • Plugin Safe Args kini dapat diterapkan ke project library. b/80036553
  • Plugin Safe Args kini dapat diterapkan ke project fitur. b/110011752

Perbaikan Bug

  • Memperbaiki masalah saat menavigasi selama metode siklus proses Fragment b/109916080
  • Memperbaiki masalah saat menjelajahi grafik bertingkat beberapa kali b/110178671
  • Memperbaiki masalah saat menggunakan setPopUpTo dengan tujuan pertama dalam grafik b/109909461
  • Memperbaiki masalah saat semua nilai app:defaultValue diteruskan sebagai String b/110710788
  • aapt2 yang dipaketkan dengan Plugin Android Gradle 3.2 Beta 01 kini menambahkan aturan keep untuk setiap atribut android:name dalam file XML Navigation b/79874119
  • Memperbaiki kebocoran memori saat mengganti FragmentNavigator default b/110900142

2 Juli 2018

Versi AndroidX dari Lifecycle, Room, dan Paging merilis versi 2.0.0-beta01.

Lifecycle

Perbaikan Bug

  • Memperbaiki aturan proguard LifecycleObserver agar hanya menyimpan implementasi, bukan sub-antarmuka. b/71389427
  • Memperbaiki aturan proguard ViewModel untuk memungkinkan obfuscation dan penciutan

Room

Perubahan API/Perilaku

  • Menambahkan RoomDatabase.Builder.setQueryExecutor() untuk mengizinkan penyesuaian tempat kueri dijalankan
  • Menambahkan dukungan Observable RxJava2
  • Implementasi DAO dan Database yang dihasilkan sekarang sudah final

Perbaikan Bug

  • Menentukan nama class/kolom di error "tidak dapat menemukan getter untuk kolom" b/73334503
  • Memperbaiki kompatibilitas mundur RoomOpenHelper dengan versi Room yang lebih lama. b/110197391

Paging

Perbaikan Bug

  • Memperbaiki konten yang hilang dalam beberapa kasus prepend (placeholder dinonaktifkan, PositionalDataSource) b/80149146
  • (Sudah dirilis dalam 1.0.1) Memperbaiki error ketika PagedListAdapter dan AsyncPagedListDiffer gagal menandai peristiwa pemindahan. b/110711937

26 Juni 2018

Paging

Paging 1.0.1 dirilis dengan satu perbaikan bug di runtime. Kami sangat menganjurkan penggunaan 1.0.1 demi stabilitas. Paging RxJava2 1.0.1 juga dirilis, dan identik dengan 1.0.0-rc1.

Perbaikan Bug

  • Memperbaiki error ketika PagedListAdapter dan AsyncPagedListDiffer gagal menandai peristiwa pemindahan. b/110711937

WorkManager

WorkManager 1.0.0-alpha04 dirilis.

Perbaikan Bug

  • PeriodicWorkRequest kini dijadwalkan ulang dengan benar saat menggunakan implementasi berbasis AlarmManager.

  • Memperbaiki potensi ANR saat menjadwal ulang semua pekerja setelah penghentian paksa atau memulai ulang. b/110507716

  • Menambahkan anotasi nullability ke berbagai WorkManager API. b/110344065

  • Mencatat pengecualian yang tidak tertangkap yang terjadi selama eksekusi Worker. b/109900862

  • Memungkinkan migrasi database destruktif jika Anda memutuskan untuk kembali ke versi WorkManager yang lebih lama. b/74633270

  • Memperbaiki error migrasi jika membuat tag implisit duplikat. Ini adalah masalah yang sangat langka yang terjadi hanya jika Anda menggunakan format tag implisit yang sama.

19 Juni 2018

Room

Room 1.1.1 dirilis. Rilis ini identik dengan Room versi 1.1.1-rc1.

WorkManager

WorkManager 1.0.0-alpha03 dirilis.

Perbaikan Bug

  • Memperbaiki kondisi race dalam implementasi berbasis AlarmManager. b/80346526.

  • Memperbaiki tugas duplikat saat menggunakan JobScheduler setelah reboot perangkat.

  • Pekerjaan dengan pemicu URI Konten sekarang bertahan dari reboot. b/80234744

  • Pembaruan dokumentasi. b/109827628, b/109758949, b/80230748

  • Memperbaiki error saat mengantrekan ulang WorkRequest. b/109572353.

  • Memperbaiki peringatan compiler Kotlin saat menggunakan dependensi work-runtime-ktx.

  • WorkManager kini menggunakan Room versi 1.1.1-rc1.

Perubahan API

  • Menambahkan getStatusesSync(), versi sinkron dari WorkContinuation.getStatuses().

  • Worker memiliki kemampuan untuk membedakan pembatalan yang dimulai oleh pengguna dengan penghentian sementara yang diminta oleh sistem operasi. Worker.isStopped() akan menampilkan true jika penghentian jenis apa pun diminta. Worker.isCancelled() akan menampilkan true jika pekerjaan dibatalkan secara eksplisit. b/79632247

  • Menambahkan dukungan untuk JobParameters#getNetwork() pada API 28. Dukungan ini akan melalui Worker.getNetwork().

  • Menambahkan Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit) sehingga Anda dapat memberlakukan jumlah pekerjaan yang dapat dikirim ke JobScheduler atau AlarmManager. Dengan demikian, WorkManager tidak akan menggunakan semua slot JobScheduler yang tersedia.

  • Menambahkan Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId) yang membantu menentukan rentang ID pekerjaan JobScheduler yang aman untuk digunakan oleh WorkManager. b/79996760

  • Worker.getRunAttemptCount() menampilkan jumlah percobaan saat ini untuk Worker tertentu. b/79716516

  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) memungkinkan Anda mengantrekan PeriodicWorkRequest unik. b/79600647

  • WorkManager.cancelAllWork() membatalkan semua Worker. Library yang bergantung pada WorkManager dapat menanyakan kapan kali terakhir metode ini dipanggil menggunakan WorkManager.getLastCancelAllTimeMillis() untuk pembersihan tambahan status internal.

  • Menambahkan WorkManager.pruneWork() untuk menghapus tugas yang sudah selesai dari database internal. b/79950952, b/109710758

Perubahan Perilaku

  • Menambahkan tag implisit untuk semua WorkRequest, yang merupakan nama class yang sepenuhnya memenuhi syarat untuk Worker. Hal ini memungkinkan Anda menghapus WorkRequest tanpa tag atau saat id tidak tersedia. b/109572351

Perubahan yang Dapat Menyebabkan Gangguan

  • Mengganti nama Worker.WorkerResult menjadi Worker.Result.

  • Worker.onStopped kini memiliki parameter isCancelled tambahan yang ditetapkan ke true saat Worker dibatalkan secara eksplisit.

7 Juni 2018

Navigation 1.0.0-alpha02 dirilis.

Perubahan Perilaku

  • FragmentNavigator sekarang menggunakan setReorderingAllowed(true). b/109826220

  • Navigation sekarang meng-URLDecode argumen yang diurai dari URL deep link. b/79982454

Perbaikan Bug

  • Memperbaiki IllegalStateException saat memanggil navigasi dari metode siklus proses Fragment. b/79632233

  • Navigation sekarang bergantung pada Support Library 27.1.1 untuk memperbaiki kedipan saat menggunakan animasi. b/80160903

  • Memperbaiki IllegalArgumentException saat menggunakan defaultNavHost="true" sebagai fragmen turunan. b/79656847

  • Memperbaiki StackOverflowError saat menggunakan NavDeepLinkBuilder. b/109653065

  • Memperbaiki IllegalArgumentException saat menavigasi kembali ke grafik bertingkat. b/80453447

  • Memperbaiki masalah Fragment yang tumpang-tindih saat menggunakan launchSingleTop. b/79407969

  • Navigation sekarang membuat data sebelumnya yang benar dan bersifat sintetis untuk grafik bertingkat. b/79734195

  • NavigationUI kini akan menyorot item yang benar saat grafik bertingkat digunakan sebagai MenuItem. b/109675998

Perubahan API

  • Atribut clearTask untuk tindakan dan API terkaitnya di NavOptions tidak digunakan lagi. b/80338878

  • Atribut launchDocument untuk tindakan dan API terkaitnya di NavOptions tidak digunakan lagi. b/109806636

24 Mei 2018

WorkManager 1.0.0-alpha02 dirilis.

WorkManager

Perbaikan Bug

  • Memperbaiki NullPointerException pada State.isFinished(). b/79550068

  • Memperbaiki masalah yang menyebabkan Worker dijadwalkan ulang pada Application.onCreate(). b/79660657

  • Memperbaiki masalah ketika Anda dapat menjadwalkan lebih banyak pekerjaan dari yang diizinkan oleh OS. b/79497378

  • Mengalihkan pembersihan penguncian layar saat aktif yang terkait dengan Worker ke thread latar belakang.

  • Implementasi AlarmManager kini melakukan pembersihan dengan benar saat semua pekerjaan yang tertunda selesai.

  • Memperbaiki kueri SQL pembersihan yang memengaruhi lokalitas selain Inggris. b/80065360

  • Menambahkan dukungan untuk float di Data. b/79443878

  • Data.Builder.putAll() kini menampilkan instance Builder. b/79699162

  • Lebih banyak javadoc dan perbaikan dalam dokumentasi. b/79691663

Perubahan API

  • Worker dapat bereaksi saat dihentikan. Worker.isStopped() dapat digunakan untuk memeriksa apakah Worker telah dihentikan. Worker.onStopped() dapat digunakan untuk melakukan operasi pembersihan ringan.

  • Worker.getTags() API menampilkan Set tag yang terkait dengan Worker.

  • Menambahkan overload javax.time.Duration untuk API yang menggunakan kombinasi durasi dan TimeUnit. Ini dilindungi oleh @RequiresApi(26).

  • Ekstensi WorkManager telah dipindahkan dari paket androidx.work.ktx ke paket androidx.work. Ekstensi lama tidak lagi digunakan dan akan dihapus dalam versi yang akan datang.

  • Configuration.withExecutor() tidak digunakan lagi. Gunakan Configuration.setExecutor() saja.

16 Mei 2018

Paging RxJava2 1.0.0-rc1 dan Room 1.1.1-rc1 dirilis. Kami sangat menganjurkan penggunaan Room versi 1.1.1-rc1 sebagai pengganti versi 1.1.0 jika Anda menggunakan migrasi.

Room

Memperbaiki bug di mana Room tidak akan menangani inisialisasi migrasi post dengan benar b/79362399

Paging

Paging rxjava2 berpindah ke kandidat rilis tanpa perubahan dari rilis alfa awal.

8 Mei 2018

Paging 1.0, Navigation, dan WorkManager Alfa, Room 1.1, AndroidX

Paging 1.0.0 dan Room 1.1.0 dirilis, bersama versi alfa untuk dua Komponen Arsitektur baru, yaitu Navigation dan WorkManager.

Tidak ada perubahan pada Paging dan Room sejak kandidat rilis terbaru.

Library Baru: Navigation

Navigation menyediakan framework untuk membuat navigasi dalam aplikasi. Rilis awalnya adalah 1.0.0-alpha01.

Library Baru: WorkManager

WorkManager menyederhanakan penjadwalan dan eksekusi pekerjaan latar belakang yang terjamin dan mematuhi batas. Rilis awalnya adalah 1.0.0-alpha01.

AndroidX

Komponen arsitektur berpindah menjadi bagian dari AndroidX, termasuk nama paket yang diupdate, nama artefak, dan dependensi pada library AndroidX lainnya. Semua ini dirilis berdasarkan versi 2.0.0-alpha1 untuk digunakan bersama dengan Library AndroidX.

Ekstensi Kotlin

ViewModel, ReactiveStreams, dan Sqlite (sebelumnya komponen 'Database' Room) semua memiliki library ekstensi Kotlin yang ditambahkan sebagai bagian dari rilis alfa AndroidX. Selain itu, Navigation dan WorkManager menyertakan modul -ktx. Masing-masing modul ekstensi ini dapat ditemukan dalam menambahkan komponen.

2 Mei 2018

  • Kandidat Rilis Room 1.1.0
  • Room 1.1.0-rc1 dirilis.

Perbaikan Bug

  • Room kini kompatibel dengan Kotlin 1.2.40. b/78328708

19 April 2018

Kandidat Rilis Paging

Paging versi 1.0.0-rc1 dan Room versi 1.1.0-beta3 dirilis.

Paging

Kami tidak memiliki masalah umum atau fitur baru lagi yang dijadwalkan untuk rilis Paging 1.0.0. Harap upgrade project untuk menggunakan 1.0.0-rc1 dan bantu kami melakukan uji banding agar dapat merilis 1.0.0 yang sempurna.

Tidak ada perubahan dalam rilis ini, semuanya sama dengan versi 1.0.0-beta1.

Room

Perbaikan Bug

  • Memperbaiki error kompilasi saat POJO Kotlin mereferensi entitas relasi yang didefinisikan di Java b/78199923

5 April 2018

Room 1.1.0-beta2, Paging 1.0.0-beta1, dan Paging RxJava 1.0.0-alpha1 dirilis.

Paging akan berada dalam versi beta untuk waktu singkat sebelum menjadi kandidat rilis. Tidak ada rencana perubahan API lebih lanjut untuk Paging 1.0, dan standar untuk setiap perubahan API sangatlah tinggi.

Dukungan RxJava2 alfa untuk Paging dirilis sebagai modul opsional terpisah (android.arch.paging:rxjava2:1.0.0-alpha1) dan akan diberi versi sementara secara terpisah sampai stabil.

Library baru ini memberikan alternatif RxJava2 untuk LivePagedListBuilder, yang mampu merancang Observable dan Flowable, menggunakan Scheduler, bukannya Executor:

Kotlin

val pagedItems = RxPagedListBuilder(myDataSource, /* page size */ 50)
        .setFetchScheduler(myNetworkScheduler)
        .buildObservable()

Java

Observable<PagedList<Item>> pagedItems =
        RxPagedListBuilder(myDataSource, /* page size */ 50)
                .setFetchScheduler(myNetworkScheduler)
                .buildObservable();

Paging

Fitur Baru

  • RxPagedListBuilder ditambahkan melalui artefak android.arch.paging:rxjava2 baru.

Perubahan API

  • Perubahan API untuk memperjelas peran eksekutor dalam builder:

    • Mengganti nama setBackgroundThreadExecutor() menjadi setFetchExecutor() (dalam PagedList.Builder dan LivePagedListBuilder)

    • Mengganti nama setMainThreadExecutor() menjadi setNotifyExecutor() (dalam PagedList.Builder).

  • Memperbaiki anggota PagedList.mCallbacks menjadi pribadi.

Perbaikan Bug

  • LivePagedListBuilder memicu pemuatan PagedList awal pada eksekutor yang ditentukan, bukannya kumpulan thread IO Komponen Arch.

  • Perbaikan perilaku pembatalan validasi dalam wrapper DataSource internal (yang digunakan untuk mengimplementasikan DataSource.map, serta pemuatan PositionalDataSource yang dinonaktifkan placeholder). b/77237534

Room

Perbaikan Bug

  • Memperbaiki bug penting dalam implementasi Single dan Maybe Rx Room saat kueri didaur ulang lebih awal, sehingga terjadi masalah jika Anda menambahkan lebih dari 1 observer ke instance Single atau Maybe yang ditampilkan. b/76031240

  • RoomDatabase.clearAllTables tidak akan melakukan VACUUM database jika dipanggil di dalam transaksi. b/77235565

21 Maret 2018

Room 1.1.0-beta1, Paging 1.0.0-alpha7, dan Lifecycle 1.1.1 dirilis.

Room

Perubahan API

Perbaikan Bug

  • RoomDatabase.clearAllTables kini mencoba mengembalikan ruang ke sistem operasi dengan menyetel checkpoint WAL dan melakukan VACUUM database.

  • @RawQuery sekarang menerima Pojo apa pun untuk properti observedEntities selama Pojo tersebut mereferensikan ke satu atau beberapa entity melalui kolom Embedded atau Relation miliknya. b/74041772

  • Paging: Implementasi DataSource Room sekarang menangani dependensi multi-tabel dengan benar (seperti relasi dan gabungan). Sebelumnya penanganan tersebut akan gagal memicu hasil baru, atau dapat gagal mengompilasi. b/74128314

Lifecycles

Hanya satu perubahan kecil: android.arch.core.util.Function dipindahkan dari arch:runtime ke arch:common. Pemindahan tersebut memungkinkan class ini untuk digunakan tanpa dependensi runtime, misalnya dalam paging:common di bawah.

lifecycle:common merupakan dependensi dari lifecycle:runtime sehingga perubahan ini tidak memengaruhi lifecycle:runtime secara langsung, hanya modul yang bergantung langsung pada lifecycle:common, seperti yang dilakukan oleh Paging.

Paging

Paging 1.0.0-alpha7 dirilis bersama Lifecycle 1.1.1. Karena Paging alfa7 bergantung pada pemindahan class Function sebagaimana disebutkan di atas, Anda harus memperbarui dependensi lifecycle:runtime ke android.arch.lifecycle:runtime:1.1.1.

Paging alpha7 direncanakan menjadi rilis final sebelum Paging mencapai beta.

Perubahan API

  • Objek DataSource.LoadParams sekarang memiliki konstruktor publik dan objek DataSource.LoadCallback sekarang abstrak. Perubahan ini memungkinkan penggabungan DataSource atau pengujian DataSource secara langsung dengan callback palsu. b/72600421
  • Mapper untuk DataSource dan DataSource.Factory
    • map(Function<IN,OUT>) memungkinkan Anda mengubah, menggabungkan, atau mendekorasi hasil yang dimuat DataSource.
    • mapByPage(<List<IN>,List<OUT>>) memungkinkan tindakan yang sama untuk batch processing (misalnya, jika item yang dimuat dari SQL harus mengkueri database terpisah, hal tersebut dapat dilakukan sebagai batch.)
  • PagedList#getDataSource() ditambahkan sebagai metode yang mempermudah pekerjaan b/72611341
  • Semua class yang tidak digunakan lagi telah dihapus dari API, termasuk sisa-sisa paket recyclerview.extensions dan LivePagedListProvider.
  • DataSource.Factory diubah dari antarmuka menjadi class abstrak guna memungkinkan fungsi peta.

Perbaikan Bug

  • Mengubah Builder menjadi final. b/70848565
  • Perbaikan implementasi DataSource Room untuk menangani kueri multitabel. Perbaikan ini disertakan dalam Room 1.1.0-beta1, lihat di atas.
  • Perbaikan bug yang menyebabkan BoundaryCallback.onItemAtEndLoaded tidak dipanggil untuk PositionalDataSource jika placeholder diaktifkan dan ukuran total merupakan kelipatan persis ukuran halaman.

2 Maret 2018

Room 1.1.0-alpha3 dirilis. Ini adalah rilis alfa terencana terakhir untuk Room 1.1.0.

Perubahan API

  • Metode addObserver dan removeObserver di InvalidationTracker sekarang sinkron dan perlu dipanggil pada non-UI thread. Perubahan ini mencegah beberapa kondisi race saat mengamati tabel.

  • Ada metode clearAllTables() baru di class RoomDatabase yang akan memotong semua isi tabel. b/63807999

  • SupportSQLiteQuery sekarang memiliki metode getArgCount() yang akan menampilkan jumlah parameter kueri. b/67038952

Perbaikan Bug

  • @RawQuery sekarang didukung dengan benar untuk kueri Paging. b/72600425

  • Room kini dengan benar menamai class Dao yang dihasilkan untuk menghindari konflik nama saat 2 atau beberapa antarmuka Dao merupakan class dalam di paket yang sama dan memiliki nama yang sama. b/73536380

  • Jenis kolom generik di Pojo diurai dengan benar sebagai anggota class yang diperluas. b/73534868

  • Parameter kueri dalam antarmuka Dao yang diwarisi dari artefak dependensi sekarang diurai dengan benar. b/68118746

  • Kueri yang dihasilkan untuk @Relation sekarang meng-escape nama kolom dengan benar. b/70925483

27 Februari 2018

Paging 1.0.0-alpha6 dirilis bersamaan dengan rilis Support Library 27.1.0. ListAdapter dan beberapa class terkait telah dipindahkan dari Library Paging secara langsung ke Recyclerview, bersama beberapa perubahan nama untuk lebih memperjelas fungsi class tertentu. Rilis alfa paging ini kemungkinan besar merupakan rilis terakhir yang memiliki perubahan API signifikan yang dapat mengganggu.

Perubahan API

  • Class yang dipindahkan ke recyclerview-v7:
    • ListAdapter
  • Class yang diganti nama, dan dipindahkan ke recyclerview-v7:
    • ListAdapterHelper -> AsyncListDiffer
    • ListAdapterConfig -> AsyncDifferConfig
    • DiffCallback -> DiffUtil.ItemCallback
  • Class yang diganti nama di dalam runtime-paging:
    • PagedListAdapterHelper -> AsyncPagedListDiffer

Class-class yang dipindahkan berguna bersama RecyclerView, independen dari Library Paging. Ini berarti mereka dapat digunakan tanpa bergantung pada rilis alfa Paging, tetapi juga berarti aplikasi yang menggunakan Paging harus di-upgrade ke Alfa 6 dan Support Library 27.1.0 secara bersamaan.

** Panduan migrasi untuk Paging Alfa6: **

  • Perbarui dependensi paging dan recyclerview ke android.arch.paging:runtime:1.0.0-alpha6 dan com.android.support:recyclerview-v7:27.1.0
    • ini harus dilakukan secara bersamaan, selagi ListAdapter dipindahkan dari Paging ke RecyclerView
  • Perbarui referensi ListAdapterHelper apa pun ke AsyncListDiffer
    • getItem(index)/getItemCount() dihapus dan diganti dengan pola pemanggilan getCurrentList().getItem(index) dan getCurrentList().size() yang lebih eksplisit.
  • Perbarui semua referensi ListAdapterConfig ke AsyncDifferConfig
  • Perbarui semua referensi DiffCallback ke DiffUtil.IttemCallback
  • Perbarui semua referensi PagedListAdapterHelper ke AsyncPagedListDiffer
  • Perbarui referensi setList() ke submitList()
    • mengganti nama untuk memperjelas sifat asinkron diffing daftar

Perbaikan Bug

  • Memperbaiki penerusan posisi awal yang salah ke pemuatan awal saat placeholder dinonaktifkan. b/73513780

15 Februari 2018

Room 1.1.0-alpha2 dirilis.

Fitur Baru

  • Room sekarang mendukung pembukaan database dalam mode penulisan sebelum logging. Dalam mode ini, tulisan Anda tidak akan lagi memblokir kueri baca. Meskipun menghabiskan lebih banyak memori (karena banyaknya koneksi), mode ini biasanya lebih cepat. Secara default, Room akan menggunakan WAL jika perangkat menjalankan API 16 atau yang lebih baru dan bukan merupakan perangkat dengan memori rendah. Anda dapat mengontrol perilaku ini menggunakan metode setJournalMode() pada RoomDatabase.Builder. b/67757002

  • Dukungan Guava: Room kini mendukung ditampilkannya Optional<T> atau ListenableFuture<T> Guava dalam kueri DAO. Untuk menggunakan ListenableFuture<T>, Anda perlu mengimpor artefak guava dari Room (android.arch.persistence.room:guava:1.1.0-alpha2).

  • Room kini mendukung ditampilkannya java.util.Optional<T> dari kueri DAO.

  • Metode antarmuka dengan implementasi default kini didukung dalam metode @Transaction di class DAO. Ini berfungsi baik untuk Java 8 maupun Kotlin. b/72416735

Perbaikan Bug

  • Konstruktor dengan @Relation tidak akan menyebabkan error kompilasi jika ada konstruktor lain yang dapat digunakan. b/72884434

  • Nama tabel yang di-escape dengan ' dalam metode @Query sekarang di-escape dengan benar untuk pelacak pembatalan. b/72366965

  • Room kini menggunakan anotasi @Metadata Kotlin untuk membaca struktur class selama pemrosesan anotasi. Ini berarti, meskipun pojo diwarisi dari dependensi, nama parameter konstruktor-nya dapat dibaca dengan benar. b/67181813

  • Masalah saat menemukan jalur migrasi downgrade sudah diperbaiki. b/72153525

  • Jenis kolom non-default kini ditangani dengan benar saat bermigrasi dari database yang ada ke Room. b/71953987

  • Room sekarang menangani kolom boolean? yang ada di class Kotlin dengan benar. b/72786402

22 Januari 2018

Lifecycle 1.1.0, Room 1.1.0-alpha1, dan Paging 1.0.0-alpha5 dirilis.

Lifecycle 1.1.0

Perubahan Paket

Dependensi baru yang jauh lebih kecil sekarang tersedia:

  • android.arch.lifecycle:livedata:1.1.0
  • android.arch.lifecycle:viewmodel:1.1.0

Perubahan API

  • LifecycleActivity dan LifecycleFragment yang sudah tidak digunakan lagi sekarang telah dihapus. Harap gunakan FragmentActivity, AppCompatActivity, atau dukung Fragment.
  • Anotasi @NonNull telah ditambahkan ke ViewModelProviders dan ViewModelStores
  • Konstruktor ViewModelProviders tidak digunakan lagi. Harap gunakan metode statisnya secara langsung
  • ViewModelProviders.DefaultFactory tidak digunakan lagi - harap gunakan ViewModelProvider.AndroidViewModelFactory
  • Metode ViewModelProvider.AndroidViewModelFactory.getInstance(Application) statis telah ditambahkan untuk mengambil Factory statis yang cocok untuk membuat instance ViewModel dan AndroidViewModel.

Room 1.1.0-alpha1

Fitur Baru

  • RawQuery: API baru ini memungkinkan metode @Dao menerima SQL sebagai parameter kueri b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom: API baru di RoomDatabase.Builder ini memberikan kontrol yang lebih terperinci terkait dari versi skema awal mana migrasi destruktif diizinkan (dibandingkan dengan fallbackToDestructiveMigration) b/64989640
  • Room sekarang hanya mendukung Paging API yang lebih baru (alpha-4+), dan melepas dukungan untuk LivePagedListProvider yang tidak digunakan lagi. Untuk menggunakan Room alfa baru, Anda harus menggunakan paging alpha-4 atau yang lebih tinggi, dan beralih dari LivePagedListProvider ke LivePagedListBuilder jika belum melakukannya.

Perbaikan Bug

  • Peningkatan dukungan untuk jenis Kotlin Kapt. b/69164099
  • Urutan kolom tidak membatalkan skema lagi. b/64290754

Paging 1.0.0-alpha5

Perbaikan Bug

  • Perbaikan pemuatan halaman saat placeholder dinonaktifkan b/70573345
  • Logging tambahan untuk melacak bug IllegalArgumentException b/70360195 (dan perbaikan sisi Room spekulatif)
  • Perbaikan kode contoh Javadoc b/70411933, b/71467637

11 Desember 2017

Paging alpha4-1 dirilis. Ini adalah rilis perbaikan kecil pada bug untuk Paging alfa 4.

Perbaikan Bug

  • Jangan periksa apakah terdapat sumber data yang tidak valid pada parameter callback. b/70353706, b/70360195

7 Desember 2017

Paging alpha4 dirilis, dengan perubahan dan penambahan signifikan, yang sebagian besar menargetkan jaringan, dan kasus penggunaan jaringan + database.

Perubahan API

  • DataSource sekarang adalah API asinkron, untuk lebih memudahkan paging langsung dari jaringan:

    • Titik masuk tunggal untuk ukuran dan data awal
    • Mendukung percobaan ulang jaringan dengan menahan callback, dan mengirimnya nanti
    • Callback threadsafe memungkinkan pemuatan asinkron untuk membuat PagedList yang didukung jaringan tunggal di UI thread.
    • Perilaku error di sekitar parameter pemuatan awal lebih jelas
  • TiledDataSource diganti namanya menjadi PositionalDataSource untuk mencerminkan pengindeksan berbasis posisi dan fakta bahwa susunan pengindeksan tidak berubah saat placeholder dinonaktifkan.

  • PageKeyedDataSource ditambahkan untuk mendukung token berikutnya/sebelumnya yang disematkan pada pemuatan halaman jaringan. KeyedDataSource diganti namanya menjadi ItemKeyedDataSource agar perbedaannya jelas.

  • LivePagedListBuilder dan DataSource.Factory menggantikan LivePagedListProvider. Builder menyediakan kemampuan yang sama dengan lebih banyak penyesuaian dan default yang lebih sederhana. Factory mengizinkan kode pembuatan DataSource untuk tetap independen dari LiveData.

  • PagedList.BoundaryCallback ditambahkan untuk kasus penggunaan database + jaringan.

  • Konstruktor PagedList.Builder mengambil DataSource + PagedList.Config, sehingga sekarang lebih mirip dengan LivePagedListBuilder, dan mengizinkan operator diamond dalam bahasa Java, atau jenis yang ditentukan dalam Kotlin.

  • PagedList.getConfig() ditambahkan, dan PagedList.Config sekarang memiliki properti anggota publik.

  • KeyedDataSource.loadBefore() tidak lagi berharap hasil akan dibalik.

  • PagedListAdapter.onCurrentListChanged() ditambahkan untuk memproses update tentang PagedList yang sedang ditampilkan.

Perbaikan Bug

  • Memperbaiki IndexOutOfBoundsException di PagedListAdapter(Helper) b/67883658

1.0.0 - 6 November 2017

Semua komponen utama (kecuali Paging) sekarang versi 1.0.0. Ini adalah rilis yang sama persis dengan rc1 kecuali untuk satu perubahan pada library reactivestreams.

Perbaikan Bug

Kandidat Rilis - 18 Oktober 2017

Semua artefak utama (kecuali Paging) sekarang versi 1.0.0-rc1.

Tidak ada masalah umum atau fitur baru lainnya yang dijadwalkan untuk rilis 1.0.0. Harap upgrade project Anda untuk menggunakan 1.0.0-rc1 dan bantu kami melakukan uji banding agar dapat merilis 1.0.0 yang sempurna.

Perubahan Perilaku

  • Dengan rilis ini, Lifecycle.Event#ON_STOP sekarang dikirim jika onSaveInstanceState dipanggil (sebelumnya, hanya ditandai sebagai CREATED tanpa mengirim ON_STOP). Anda dapat membaca selengkapnya di dokumentasi Lifecycles.

Perbaikan Bug

  • Room:

    • Room sekarang bergantung pada artefak xerial terbaru yang memperbaiki masalah OutOfMemory selama kompilasi. b/62473121
    • Metode Query sekarang dapat dianotasi dengan @Transaction. Untuk mengetahui detailnya, lihat dokumen referensi di @Transaction. b/65112315
    • Class StringUtil di Room dihapus dari API publik (tidak pernah dimaksudkan sebagai API publik).
  • Lifecycles:

    • LiveData berfungsi dengan baik saat Activity dicakup sebagian di API < 24. b/65665621

    • Metode OnLifecycleEvent di class induk kini dipanggil dengan benar, atau peringatan dicetak selama kompilasi jika tidak memungkinkan. b/63474615

    • Lifecycle sekarang menyimpan WeakReference kembali ke LifecycleOwner untuk menghindari kebocoran LifecycleOwner jika Siklus proses disimpan dalam memori lebih lama dari biasanya (ini hanya tindakan pencegahan, Anda harus tetap berhati-hati untuk tidak membocorkan Lifecycle).

9 Oktober 2017

Paging alpha-3 dirilis; yang membuatnya kompatibel dengan rilis beta 2 Lifecycles dan Room.

Perbaikan Bug

  • Peningkatan Dokumentasi Paging.

5 Oktober 2017

Semua artefak utama (kecuali Paging) sekarang versi beta 2. Tidak ada versi baru Paging dalam rilis ini.

Perbaikan Bug

  • Lifecycles:

    • LiveDataReactiveStreams sekarang berhenti berlangganan dengan benar dari penayang sumber saat LiveData tidak aktif. b/62609183
    • Peristiwa Lifecycle disebarkan dengan benar ke class induk saat class induk berasal dari modul lain. b/63474615
    • LiveData menangani observer dengan benar saat observer berhenti berlangganan saat pembuatan langganan berlangsung. b/66337741
    • FullLifecycleObserver untuk artefak Bahasa Java 8 kini tersedia di hierarki dependensi. b/66525578

    • Untuk proguard, harap tambahkan baris berikut ke file proguard Anda. (Baris ini tidak diperlukan saat 1.0.0 dirilis)

      • -keep class * implements android.arch.lifecycle.GeneratedAdapter {<init>(...);}
  • Room:

    • Room sekarang mencetak error pada waktu kompilasi saat Pojo yang ditampilkan dalam metode @Query memiliki kolom @NonNull yang tidak cocok dengan kolom mana pun dalam respons kueri. Jika kolom adalah @Nullable, Room hanya akan mencetak peringatan. b/67115337
    • Room sekarang memvalidasi indeks dalam versi OS yang lebih baru. b/63132683
    • Room memilih konstruktor no-arg secara default jika ada beberapa konstruktor yang cocok dalam Pojo. b/67353427
    • Kunci utama kolom tunggal dapat menjadi Nullable jika kunci tersebut adalah Integer atau Long. b/67086876
    • Pelacak pembatalan menangani entri ulang dengan benar dalam mode uji coba. b/65471397
    • Room sekarang memeriksa apakah ada karakter tidak valid dalam nama kolom dan tabel pada waktu kompilasi (karakter tidak valid: `, "). b/64749111

21 September 2017

Dengan rilis ini, semua modul Komponen Arsitektur mencapai setidaknya beta 1 (kecuali Library Paging baru yang mencapai alpha 2).

Kami tidak merencanakan perubahan API lainnya. Perubahan yang tidak terencana mungkin terjadi, tetapi batasan untuk mengubah API apa pun sebelum 1.0.0 menjadi stabil sangat tinggi dan sangat kecil kemungkinan untuk terjadi.

  • LifecycleActivity & LifecycleFragment akan dihapus sebelum 1.0.0 menjadi stabil. Keduanya tidak diperlukan saat menggunakan Support Library 26.1.0 atau yang lebih baru.

Berbeda dengan fase alfa, fase beta dijadwalkan dengan durasi yang sangat singkat.

Perubahan Versi

  • Lifecycle Extensions dan Room sekarang adalah versi beta 1
  • Paging sekarang versi alpha 2
  • Tidak ada perubahan dalam Lifecycles (runtime, umum) dan Arch Core (umum). Kedua artefak ini adalah versi 1.0.0 sejak 13 September.

Artefak Baru

  • Lifecycles kini memiliki artefak baru yang disebut common-java8. Artefak ini berisi antarmuka baru yang disebut DefaultLifecycleObserver; yang memiliki implementasi default untuk semua metode Lifecycle. Jika menggunakan bahasa Java 8, Anda harus lebih memilih artefak ini daripada anotasi.

    • Karena adanya bug dalam beta1, Anda perlu menambahkan dependensi eksplisit pada modul android.arch.lifecycle:common:1.0.1 untuk menggunakan artefak common-java8 yang baru. Masalah ini akan diperbaiki dalam beta2.

Perubahan Paket

  • android.arch.persistence.room.db telah dipindahkan ke android.arch.persistence.db
  • android.arch.persistence.room.db-impl telah dipindahkan dan diganti namanya menjadi android.arch.persistence.db-framework

Kedua artefak ini sudah menjadi dependensi di Room, jadi Anda tidak perlu mengubah apa pun di file build, kecuali jika langsung menggunakan keduanya.

Perubahan API

  • Room:

    • Anotasi @ColumnInfo sekarang mendukung penyetelan kolasi pada kolom. b/62007004
    • Kolom transient kini diabaikan secara default, kecuali jika dianotasi dengan @ColumnInfo, @Embedded, atau @Relation. b/62600692
    • Kunci Utama harus dianotasi dengan @NonNull, kecuali jika otomatis dibuat. b/64292391
      • Perubahan ini mungkin memerlukan migrasi skema. Kami mohon maaf atas ketidaknyamanan ini.
    • Menambahkan anotasi kemudahan baru (@Transaction) yang menggantikan metode DAO dan menjalankannya di dalam transaksi.
  • Database SQLite Dukungan:

  • Paging:

    • Peningkatan dokumentasi Paging dengan lebih banyak contoh dan anotasi thread.

Perbaikan Bug

  • Room:
    • String multi-baris Kotlin dalam metode @Query ditangani dengan benar. b/65809374
  • Paging:
    • Artefak Paging tidak lagi bergantung pada junit. b/65690261

1.0.0 Alfa 9-1 - 13 September 2017

Ini adalah rilis besar ketika artefak siklus proses inti (runtime, umum) dan arch core (umum) mencapai versi stabil 1.0.0.

Seiring dengan perubahan ini, Support Library 26.1.0 sekarang bergantung pada library-library ini. AppCompatActivity dan Support Fragment sekarang mengimplementasikan antarmuka LifecycleOwner.

Rilis ini juga bergantung pada Support Library 26.1.0 untuk memanfaatkan integrasi baru.

Library Baru: Paging

Rilis ini juga mencakup library baru bernama Paging, yang memungkinkan pemuatan set data besar dengan mudah ke RecyclerView dalam beberapa potongan bila diperlukan. Paging dirilis sebagai alpha1 dan akan memiliki siklus rilisnya sendiri.

Perubahan API

Perbaikan Bug

  • Class yang dihasilkan kini dianotasi dengan @Generated jika aplikasi memiliki anotasi di classpath. b/35754819

  • Memperbaiki bug perbandingan observer MediatorLiveData. b/64413274

  • Kueri WITH SQLite kini didukung dengan [LiveData]. [ref-LiveData] b/62510164

  • Memperbaiki bug saat InvalidationTracker tidak akan mengirim daftar yang benar jika lebih dari 1 tabel diamati. b/65099281

  • Memperbaiki bug saat Room membuat file yang berbeda di Windows. b/64470691

  • LifecycleObservers dalam paket root kini didukung. b/62310817

1.0.0 Alfa 9 - 16 Agustus 2017

Perbaikan bug

1.0.0 Alfa 8 - 1 Agustus 2017

Perubahan Perilaku

  • Batasan NOT NULL ditambahkan untuk kolom jenis primitif atau kolom yang dianotasi dengan NonNull. Hal ini akan mengubah struktur tabel, jadi jika sudah menggunakan Komponen Arsitektur alfa 7 atau yang lebih lama, Anda perlu mengimplementasikan migrasi jika ingin mempertahankan datanya, atau menggunakan metode fallbackToDestructiveMigration() di builder. b/62007004

Perubahan API

1.0.0 Alfa 7 - 26 Juli 2017

Perbaikan bug

1.0.0 Alfa 6 - 25 Juli 2017

Perubahan perilaku

  • Urutan panggilan LifecycleObserver telah diubah. Sebelumnya, observer selalu dipanggil sesuai urutan penambahannya: jika observer1 ditambahkan sebelum observer2, maka observer tersebut akan menerima ON_CREATE dan semua peristiwa lain sebelum observer2. Hal ini tidak lagi benar untuk peristiwa penghancuran, karena untuk peristiwa tersebut, observer dipanggil dalam urutan penambahan terbalik. Jadi, perilaku saat ini adalah: jika observer1 ditambahkan sebelum observer2, maka ON_CREATE akan dikirim terlebih dahulu ke observer1, lalu ke observer2 (begitu juga untuk ON_START dan ON_RESUME), tetapi peristiwa ON_PAUSE akan dikirim terlebih dahulu ke observer2 dan baru setelah itu ke observer1 (begitu juga untuk ON_STOP dan ON_DESTROY).

  • Room memunculkan pengecualian jika migrasi hilang. Sebelumnya Room hanya akan menghapus database, tetapi sekarang Room akan error. Developer dapat ikut serta dalam perilaku pembersihan dengan memanggil API builder. b/63872392

Perubahan API

  • Menambahkan metode fallbackToDestructiveMigration() ke RoomDatabase.Builder untuk menghapus database jika migrasi tidak ada. b/63872392

  • Komponen arsitektur sekarang bergantung pada Support Library 26.0.0

Perbaikan bug

  • Memperbaiki penanganan @Relation yang disarangkan ke @Embedded. b/63736065

  • Memperbaiki migrasi pengujian untuk tabel dengan kunci primer yang mengalami peningkatan otomatis. b/63393618

  • Sekarang @Queries yang menjalankan kueri DELETE atau UPDATE menerima argumen dengan benar. b/63872538

  • ViewModels sekarang dipertahankan ketika fragmen pemilik ada di backstack dan perubahan konfigurasi terjadi dua kali. b/38445801

1.0.0 Alfa 5 - 18 Juli 2017

Perubahan API

Anda harus bergantung pada artefak android.arch.persistence.room:rxjava2 untuk menambahkan dukungan RxJava ke Room.

Perbaikan bug

  • Memperbaiki kueri @Delete tanpa parameter apa pun. b/63608092

  • Memperbaiki pemeriksaan jenis Room untuk pengambil dan penyetel. b/63733651

1.0.0 Alfa 4 - 11 Juli 2017

Perubahan API

  • Menambahkan metode kenyamanan baru (runInTransaction()) ke RoomDatabase.

  • Metode @Insert, @Delete, dan @Update sekarang dapat memiliki parameter dari jenis entity berbeda. b/62682405

Perbaikan Bug

  • Memperbaiki penanganan byte[] dalam metode @Dao. b/62460045

  • Pemeriksaan migrasi di Room sekarang menggunakan perbandingan tidak peka huruf besar/kecil. b/62875382

  • Memperbaiki konfigurasi proguard untuk artefak Lifecycle. b/62113696

1.0.0 Alfa 3 - 15 Juni 2017

Perubahan API

  • @OnLifecycleEvent sekarang hanya mendukung 1 parameter peristiwa. Ini adalah perubahan untuk persiapan pada dukungan Java 8 sehingga kami dapat bermigrasi ke antarmuka dengan metode default di masa mendatang. Sehubungan dengan perubahan ini, hanya metode beranotasi @OnLifecycleEvent(ON_ANY) yang dapat menerima parameter kedua dengan jenis Event (parameter pertama adalah LifecycleOwner). Lihat dokumentasi Lifecycle untuk detailnya.

  • Class LifecycleActivity dan LifecycleFragment dipindahkan ke dalam artefak android.arch.lifecycle:extensions.

  • MigrationTestHelper menerima instance Instrumentation, bukan Context, agar dapat membaca skema dari aset pengujian dan membuat database dalam konteks aplikasi.

  • Anotasi @Insert, @Delete, dan @Update dalam metode @DAO sekarang dapat memiliki parameter dari jenis Iterable. b/62259820

Perbaikan Bug

  • Metode yang diganti dengan peristiwa siklus proses tidak lagi dipanggil beberapa kali.

  • Beberapa parameter IN sekarang ditangani dengan benar. b/62608681

  • Class DAO abstrak sekarang dapat memiliki konstruktor yang menerima instance @Database. b/38488747

  • DAO sekarang dapat memiliki class/antarmuka super dengan parameter jenis. b/62103620

1.0.0 Alfa 2 - 2 Juni 2017

Perubahan API

Perbaikan Bug

  • File proguard untuk siklus proses. (b/62113696)
  • Hilangnya data dengan Konverter Jenis. (b/62100716)
  • Mendukung ditampilkannya Long[] dari kueri @Insert.

1.0.0 Alfa 1 - 17 Mei 2017

MinSDK: 14

Saran umum

  • Sementara kami melakukan banyak pengujian sebelum peluncuran, Komponen Arsitektur saat ini dalam versi alfa. Jika Anda membuat aplikasi produksi, perhatikan bahwa API akan berubah sebelum rilis 1.0 dan mungkin tidak sepenuhnya tangguh. Jika Anda tidak nyaman untuk men-debug di library yang Anda gunakan, kami merekomendasikan untuk mencoba Komponen Arsitektur sebagai project sampingan terlebih dahulu.

  • Kami tidak menyarankan semua orang untuk bermigrasi hari ini. Kami akan menyiapkan panduan migrasi untuk rilis 1.0 komponen arsitektur.

Pembatasan dan masalah umum