بایگانی یادداشت‌های انتشار مؤلفه‌های معماری

۱۵ ژانویه ۲۰۱۹

WorkManager

‫WorkManager 1.0.0-beta02 منتشر شد. این نسخه حاوی چند رفع اشکال است.

رفع اشکال‌ها

  • یک مورد حاشیه‌ای که در آن کار دوره‌ای می‌توانست بیش‌از یک بار در هر بازه زمانی در دستگاه‌های دارای Android 6.0 (سطح API‏ ۲۳) اجرا شود برطرف شد. b/121998363
  • ConcurrentModificationException در دستگاه‌های دارای Android نسخه ۵.۱ (سطح API‏ ۲۲) یا پایین‌تر برطرف شد. b/121345393
  • اجرای اشتباه کار در زمانی که «محدودیت‌ها» در دستگاه‌های دارای Android نسخه ۵.۱ (سطح میانای برنامه‌سازی کاربردی ۲۲) یا پایین‌تر برآورده نمی‌شود برطرف شد. b/122578012
  • Optimized work completion handling to be faster in some edge cases. b/122358129
  • تغییری برای رسیدگی به شرایط رقابت احتمالی بین چندین نمونه از LiveData که WorkManager استفاده می‌کند اضافه شد.
  • Moved to use Room dependency 1.1.1 instead of 1.1.1-rc01; these versions are identical. b/122578011

۱۹ دسامبر ۲۰۱۸

WorkManager

‫WorkManager 1.0.0-beta01 منتشر شد. این نسخه حاوی هیچ تغییری در میانای برنامه‌سازی کاربردی نیست؛ در آینده، انتظار می‌رود WorkManager تا نسخه بعدی ازنظر میانای برنامه‌سازی کاربردی پایدار بماند، مگراینکه مشکل بحرانی‌ای وجود داشته باشد. این نسخه حاوی چند رفع اشکال است.

رفع اشکال‌ها

  • Previously-cancelled children of successfully completed parent work will no longer run. b/120811767
  • کلاس‌های ثبت گزارش به‌درستی مقداردهی اولیه شده‌اند (عمدتاً درطول آزمایش‌ها ظاهر می‌شوند).

۱۸ دسامبر ۲۰۱۸

ناوبری 1.0.0-alpha09 منتشر شده است. این نسخهٔ پخش حاوی تغییرات ناسازگار API است؛ لطفاً بخش تغییرات ناسازگار را در زیر ببینید.

تصمیم گرفته‌ایم توسعه مصنوع android.arch.navigation:navigation-testing را ادامه ندهیم. اگرچه این روش برای آزمایش داخلی NavController مفید بوده است، اما اکیداً توصیه می‌کنیم از استراتژی‌های آزمایش جایگزین استفاده کنید، مانند شبیه‌سازی نمونه NavController برای تأیید اینکه فراخوانی‌های صحیح navigate() انجام می‌شوند. این رویکرد به‌طور مفصل در گفتگوی Single Activity در AndroidDevSummit 2018 مورد بحث قرار گرفته است و ما روی اسناد اضافی به‌طور خاص درباره آزمایش با Navigation کار خواهیم کرد.

ویژگی‌های جدید

  • MenuItems with menuCategory="secondary" will no longer pop the back stack when used with NavigationUI methods. b/120104424
  • AppBarConfiguration اکنون به شما امکان می‌دهد یک نمونه بازگشتی OnNavigateUpListener تنظیم کنید که وقتی navController.navigateUp() false را برمی‌گرداند، فراخوانی می‌شود. b/79993862 b/120690961

تغییرات ناگهانی

  • When using an <argument> with an argType="reference", Navigation no longer parses the reference, instead providing the raw resource ID itself. b/111736515
  • onNavDestinationSelected() اکنون به‌طور پیش‌فرض به مقصد شروع نمودار ناوبری شما بازمی‌گردد، و آن‌ها را با روش‌های setup سازگار می‌کند. برای جلوگیری از پدیدار شدن پشته قبلی‌ها، menuCategory="secondary" را به MenuItem اضافه کنید. aosp/852869
  • روش‌های fromBundle() کلاس‌های Args تولیدشده اکنون به‌جای Bundle تهی‌پذیر، Bundle غیرتهی می‌گیرند aosp/845616

رفع اشکال‌ها

  • آرگومان‌ها اکنون به‌درستی از پیوندهای عمیق به‌عنوان argType صحیح تجزیه می‌شوند به‌جای اینکه همیشه به‌عنوان رشته باشند b/110273284
  • اکنون «ناوبری» منابع عمومی خود را به‌درستی صادر می‌کند b/121059552
  • Safe Args اکنون با «افزایه Android Gradle» نسخه 3.4 Canary 4 و بالاتر سازگار است b/119662045

۱۲ دسامبر ۲۰۱۸

WorkManager

‫WorkManager 1.0.0-alpha13 منتشر شده است. این نسخهٔ پخش حاوی تغییر جزئی در میانای برنامه‌سازی کاربردی است که برای برخی‌از کاربران Kotlin مفید خواهد بود.

تغییرات میانای برنامه‌سازی کاربردی

  • ‫androidx.work.Result به کلاس داخلی ListenableWorker منتقل شده است. این کار از تداخل بازسازی کد با کلاس سطح بالای Result Kotlin جلوگیری می‌کند. این یک تغییر مخرب در میانای برنامه‌سازی کاربردی است. b/120564418

تغییرات ناسازگار میانای برنامه‌سازی کاربردی

  • ‫androidx.work.Result به کلاس داخلی ListenableWorker منتقل شده است.

۶ دسامبر ۲۰۱۸

صفحه‌بندی

صفحه‌بندی 2.1.0-rc01 بدون تغییر نسبت به 2.1.0-beta01 منتشر شده است.

ناوبری 1.0.0-alpha08 منتشر شده است. این نسخهٔ پخش حاوی تغییرات ناسازگار API است؛ لطفاً بخش تغییرات ناسازگار را در زیر ببینید.

ویژگی‌های جدید

  • برچسب‌های مقصد، وقتی با روش‌های NavigationUI استفاده می‌شوند، اکنون به‌طور خودکار نمونه‌های {argName} را در android:label شما با آرگومان صحیح جایگزین می‌کنند b/80267266
  • «پیمایش» اکنون به «کتابخانه پشتیبانی» نسخه ۲۸.۰.۰ وابسته است b/120293333

تغییرات ناگهانی

  • نام OnNavigatedListener به OnDestinationChangedListener تغییر کرد b/118670572
  • OnDestinationChangedListener اکنون Bundle متغیر مستقل را نیز می‌پذیرد aosp/837142
  • مشخصه‌های app:clearTask و app:launchDocument و روش‌های مرتبط با آن‌ها برداشته شده‌اند. Use app:popUpTo with the root of your graph to remove all destinations from your back stack. b/119628354
  • ActivityNavigator.Extras اکنون از الگوی Builder استفاده می‌کند و توانایی تنظیم هر پرچم Intent.FLAG_ACTIVITY_ را اضافه می‌کند aosp/828140
  • نام NavController.onHandleDeepLink به handleDeepLink تغییر کرد aosp/836063
  • بسیاری از کلاس‌ها و روش‌هایی که برای زیرکلاس‌سازی درنظر گرفته نشده‌اند، مانند NavOptions، NavInflater، NavDeepLinkBuilder، و AppBarConfiguration، final شده‌اند aosp/835681
  • روش منسوخ‌شده NavHostFragment.setGraph() برداشته شده است aosp/835684
  • روش منسوخ‌شده NavigationUI.navigateUp(DrawerLayout, NavController) برداشته شده است. aosp/835684
  • ایجاد Fragment به FragmentNavigator منتقل شده است، که واگذاری ایجاد Fragment به FragmentFactory را آسان‌تر می‌کند. b/119054429
  • سازنده NavGraphNavigator دیگر Context را نمی‌پذیرد aosp/835340
  • NavigatorProvider اکنون یک کلاس است، نه یک میانجی. NavigatorProvider برگردانده‌شده توسط getNavigatorProvider() عملکردش را تغییر نداده است. aosp/830660
  • NavDestination.navigate() برداشته شد. درعوض با navigate() در Navigator تماس بگیرید. aosp/830663
  • بازسازی کد قابل‌توجه Navigator، حذف نیاز به OnNavigatorNavigatedListener و درعوض داشتن navigate برای برگرداندن NavDestination که به آن پیمایش شده است.
  • نمونه‌های Navigator دیگر نمی‌توانند رویدادهای پاپ به NavController ارسال کنند. برای رهگیری فشار دادن دکمه برگشتن و فراخوانی navController.popBackStack()، از OnBackPressedCallback استفاده کنید. aosp/833716

رفع اشکال‌ها

  • popUpTo now works consistently when the destination is a <navigation> element b/116831650
  • تعدادی از اشکال‌ها که منجر به IllegalArgumentException هنگام استفاده از نمودارهای تودرتو می‌شدند برطرف شد b/118713731 b/113611083 b/113346925 b/113305559
  • شاخصه dataPattern از مقصدهای <activity> اکنون با فراخوانی toString()، آرگومان‌ها را از آرگومان‌های غیررشته‌ای پر می‌کند b/120161365

آرگومان‌های ایمن

  • «آرگومان‌های ایمن» از اشیای «سریال‌شدنی»، ازجمله مقادیر Enum، پشتیبانی می‌کند. انواع Enum می‌توانند بااستفاده از enum literal بدون نام کلاس، مقدار پیش‌فرض تنظیم کنند (مثلاً app:defaultValue="READ") b/111316353
  • Safe Args از آرایه‌های همه انواع پشتیبانی‌شده پشتیبانی می‌کند b/111487504
  • Safe Args اکنون زیرپوشه‌های فهرست‌های راهنمای منبع را نادیده می‌گیرد b/117893516
  • Safe Args در جاهای مناسب حاشیه‌نویسی‌های @Override را اضافه می‌کند b/117145301

۵ دسامبر ۲۰۱۸

WorkManager

‫WorkManager 1.0.0-alpha12 منتشر شده است. این نسخهٔ پخش حاوی برخی تغییرات ناسازگار در میانای برنامه‌سازی کاربردی است؛ لطفاً بخش تغییرات ناسازگار در میانای برنامه‌سازی کاربردی را در زیر ببینید. این نسخه احتمالاً به‌عنوان اولین نسخه بتای ما منتشر خواهد شد. alpha12 همچنین شامل به‌روزرسانی‌های گسترده اسناد است.

تغییرات میانای برنامه‌سازی کاربردی

  • خروجی ساختاریافته جدید work-rxjava2، RxWorker را معرفی می‌کند. این ListenableWorker است که باید Single<Payload> داشته باشد.
  • پشتیبانی از Firebase JobDispatcher به‌دلیل منسوخ شدن قریب‌الوقوع آن برداشته شده است. این یعنی با ورود به نسخه بتا، مصنوع work-firebase دیگر به‌روزرسانی نخواهد شد. در آینده به‌دنبال افزودن جایگزین خواهیم بود.
  • Payload با Result ترکیب شد. Result اکنون یک «کلاس مهروموم‌شده» با سه پیاده‌سازی واقعی است که می‌توانید ازطریق Result.success() (یا Result.success(Data))، Result.failure() (یا Result.failure(Data))، و Result.retry() به‌دست آورید. ListenableFuture شما اکنون به‌جای Payload، Result نتیجه دارد. Workers don't have getter and setter methods for output Data. این تغییر ناگهانی است.
  • Added Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) and Constraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) and variants to better support slow triggering content URIs. b/119919774
  • WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration) گونه اضافه شد. این روش به میانای برنامه‌سازی کاربردی ۲۶ نیاز دارد.
  • روش‌های افزونه Kotlin Operation.await() و ListenableFuture.await() اضافه شد.
  • نام Operation.getException() به Operation.getThrowable() تغییر کرد. این تغییر ناسازگار است.
  • کلاس ContentUriTriggers و روش‌های ارجاع‌دهنده به آن دیگر برای استفاده عمومی دردسترس نیستند. این تغییر ناسازگار است.
  • بقیه روش‌های varargs در WorkManager، WorkContinuation، و OneTimeWorkRequest برای ساده‌سازی API برداشته شد. برای رفع مشکلات ساخت، می‌توانید varargs موجود را با Arrays.asList(...) بپوشانید. ما همچنان نسخه‌های تک‌آرگومانی هر روش را لحاظ می‌کنیم. این تغییر ناسازگار است.
  • ‫WorkContinuation.combine(OneTimeWorkRequest, *) متغیر برداشته شد. آن‌ها میانای برنامه‌سازی کاربردی گیج‌کننده‌ای ارائه می‌کردند؛ روش‌های combine موجود قابل‌فهم‌تر هستند. این تغییر ناگهانی است.

رفع اشکال‌ها

  • پیاده‌سازی‌های پیش‌از Marshmallow اکنون در بازیابی از مرگ پردازش تکلیفی که درحال اجرا است قابل‌اعتمادتر هستند.
  • LiveData که ازطریق observeForever مشاهده می‌شود ازطریق WorkManager ردیابی می‌شود. این یک اصلاحیه سازگار با نسخه‌های قدیمی برای کتابخانه Room است. b/74477406
  • اکنون اگر شیء سریالی‌شده از حداکثر اندازه خود فراتر رود، Data.Builder.build() استثنایی را ایجاد می‌کند. قبلاً این اتفاق فقط در رشته پس‌زمینه‌ای رخ می‌داد که نمی‌توانستید آن را به‌درستی مدیریت کنید.
  • Further distinguished stopped vs. cancelled work; getWorkInfoById() will return a WorkInfo with the CANCELLED State during ListenableWorker.onStopped().
  • null Result را به‌عنوان شکست در ListenableWorker درنظر بگیرید. b/120362353
  • اصلاح احتمالی برای Shield Tablets که API 24 را اجرا می‌کنند و گاهی IllegalArgumentException را نشان می‌دادند. b/119484416

تغییرات ناسازگار میانای برنامه‌سازی کاربردی

  • پشتیبانی از Firebase JobDispatcher به‌دلیل منسوخ شدن قریب‌الوقوع آن برداشته شده است. این یعنی با ورود به نسخه بتا، مصنوع work-firebase دیگر به‌روزرسانی نخواهد شد. در آینده به‌دنبال افزودن جایگزینی خواهیم بود.
  • Payload با Result ترکیب شد. Result اکنون یک «کلاس مهروموم‌شده» با سه پیاده‌سازی واقعی است که می‌توانید ازطریق Result.success() (یا Result.success(Data))، Result.failure() (یا Result.failure(Data))، و Result.retry() به‌دست آورید. ListenableFuture شما اکنون به‌جای Payload، Result نتیجه دارد. Workers don't have getter and setter methods for output Data.
  • روش‌های افزونه Kotlin Operation.await() و ListenableFuture.await() اضافه شد.
  • نام Operation.getException() به Operation.getThrowable() تغییر کرد.
  • کلاس ContentUriTriggers و روش‌های ارجاع‌دهنده به آن دیگر برای استفاده عمومی دردسترس نیستند.
  • بقیه روش‌های varargs در WorkManager، WorkContinuation، و OneTimeWorkRequest برای ساده‌سازی API برداشته شد. برای رفع مشکلات ساخت، می‌توانید varargs موجود را با Arrays.asList(...) بپوشانید. ما همچنان نسخه‌های تک‌آرگومانی هر روش را لحاظ می‌کنیم.
  • ‫WorkContinuation.combine(OneTimeWorkRequest, *) متغیر برداشته شد. آن‌ها میانای برنامه‌سازی کاربردی گیج‌کننده‌ای ارائه می‌کردند؛ روش‌های combine موجود قابل‌فهم‌تر هستند.

۴ دسامبر ۲۰۱۸

اتاق

Room 2.1.0-alpha03 با پشتیبانی از کوروتین‌ها و چندین رفع اشکال منتشر شد.

تغییرات میانای برنامه‌سازی کاربردی

  • ‫FTS tokenizer در @Fts3/@Fts4 اکنون به‌جای Enum، یک رشته می‌گیرد. این کار به Room اجازه می‌دهد از توکن‌سازهای سفارشی استفاده کند. توکن‌سازهای داخلی هنوز در FtsOptions به‌عنوان ثابت‌های رشته‌ای تعریف می‌شوند. b/119234881

ویژگی‌های جدید

  • Couroutines: روش‌های DAO اکنون می‌توانند توابع تعلیق باشند. برای پشتیبانی از عملکردهای تعلیق در Room، مصنوع جدیدی به‌نام room-coroutines منتشر شده است. b/69474692
  • روش‌های DAO که با @Insert، @Delete، یا @Update حاشیه‌نویسی شده‌اند اکنون از ListenableFuture به‌عنوان نوع پاسخ پشتیبانی می‌کنند. b/119418331

رفع اشکال‌ها

  • اشکالی را برطرف کردیم که در آن Room به‌اشتباه تلاش می‌کرد سازنده‌ای با ستون‌ها در ویژگی ignoredColumns از @Entity پیدا کند. b/119830714
  • اشکالی که در آن Room پارامترهای روش DAO را به‌عنوان نهایی در پیاده‌سازی تولیدشده علامت‌گذاری نمی‌کرد برطرف شد. b/118015483
  • اشکالی برطرف شد که در آن پردازنده Room هنگام گزارش خطا در پُرسمانی با نمادهای خاص ازکار می‌افتاد. b/119520136
  • اشکالی برطرف شد که در آن Room دیگر پیاده‌سازی‌های مختلف Collection را به‌عنوان متغیرهای مستقل عبارت IN رد می‌کرد. b/119884035
  • اشکالی برطرف شد که در آن LiveData برگردانده‌شده از Room، وقتی برای همیشه مشاهده می‌شد، جمع‌آوری زباله می‌شد و باعث می‌شد دیگر داده‌های جدید منتشر نکند. b/74477406
  • قفل بسته RoomDatabase برای کاهش درگیری بر سر قفل به‌روز شد. b/117900450

۸ نوامبر ۲۰۱۸

WorkManager

‫WorkManager 1.0.0-alpha11 منتشر شد. این نسخه شامل تغییرات زیادی است که در beta به میانای برنامه‌سازی کاربردی پایدار تبدیل خواهد شد. در این نسخه پخش، تغییرات مخرب API وجود دارد؛ لطفاً بخش تغییرات مخرب API را در زیر ببینید.

تغییرات میانای برنامه‌سازی کاربردی

  • ‫work-runtime-ktx CoroutineWorker جدیدی را معرفی می‌کند.
  • نام WorkStatus به WorkInfo تغییر کرد. نام همه انواع روش‌های getStatus مربوطه به انواع getWorkInfo مربوطه تغییر کرده است. این تغییر ناگهانی است.
  • ListenableWorker.onStopped() دیگر آرگومان بولی را که نشان‌دهنده لغو شدن WorkRequest است نمی‌پذیرد. WorkManager دیگر این تمایز را قائل نمی‌شود. این تغییر ناگهانی است.
  • نام بسته androidx.work.test به بسته androidx.work.testing تغییر کرده است. این تغییر ناسازگار است.
  • تنظیم‌کننده‌ها در Constraints دیگر بخشی از میانای برنامه‌سازی کاربردی عمومی نیستند. این تغییر ناسازگار است.
  • WorkerParameters.getTriggeredContentUris() و WorkerParameters.getTriggeredContentAuthorities() آرایه‌هایی که قبلاً برگردانده شده‌اند. اکنون این روش‌ها «مجموعه‌ها» را برمی‌گردانند. این تغییر ناگهانی است.
  • نام ListenableWorker.onStartWork() به ListenableWorker.startWork() تغییر کرد. این تغییر ناسازگار است.
  • سازنده WorkStatus دیگر بخشی از میانای برنامه‌سازی کاربردی عمومی نیست. این تغییر ناسازگار است.
  • نام Configuration.getMaxJobSchedulerID() و Configuration.getMinJobSchedulerID() به‌ترتیب به Configuration.getMinJobSchedulerId() و Configuration.getMaxJobSchedulerId() تغییر کرد. این تغییر ناسازگار است.
  • تعداد زیادی حاشیه‌نویسی @NonNull به میانای برنامه‌سازی کاربردی عمومی اضافه شد تا ارگونومی میانای برنامه‌سازی کاربردی بهبود یابد.
  • میانای برنامه‌سازی کاربردی WorkManager.enqueueUniqueWork() را اضافه کنید تا OneTimeWorkRequestهای منحصربه‌فرد را بدون نیاز به ایجاد WorkContinuation در صف قرار دهید.
  • همه انواع روش‌های enqueue و cancel در WorkManager اکنون نوع جدید Operation را برمی‌گردانند. این تغییر ناسازگار است.
  • All variants of enqueue no longer accept varargs for WorkRequests. این تغییر ناسازگار است. به‌جای آن از «مجموعه‌ها» استفاده کنید. می‌توانید از Arrays.asList() برای اصلاح کد موجود استفاده کنید. این کار را برای کاهش سطح میانای برنامه‌سازی کاربردی و تعداد روش‌ها انجام دادیم.
  • تلاش برای initialize WorkManager بیش‌از یک‌بار در هر فرایند اکنون منجر به IllegalStateException می‌شود. این تغییر ناسازگار است.

رفع اشکال‌ها

  • ‫WorkRequest.Builder در آرتیفکت work-runtime-ktx اکنون از ListenableWorker استفاده می‌کند. تصحیح b/117666259
  • مطمئن شوید زمان اجرای بعدی برای PeriodicWork در آینده است. Fixes b/118204399
  • هنگام استفاده از WorkManager در راه‌اندازی برنامه، ورودی/خروجی دیسک احتمالی را بردارید. Fixes b/117796731
  • رفع شرایط رقابت در WorkConstraintsTracker. ‫android-workmanager/issues/56 را برطرف می‌کند

تغییرات ناسازگار میانای برنامه‌سازی کاربردی

  • نام WorkStatus به WorkInfo تغییر کرد. نام همه انواع روش‌های getStatus مربوطه به انواع getWorkInfo مربوطه تغییر کرده است.
  • ListenableWorker.onStopped() دیگر آرگومان بولی را که نشان‌دهنده لغو شدن WorkRequest است نمی‌پذیرد. WorkManager دیگر این تمایز را قائل نمی‌شود.
  • نام بسته androidx.work.test به بسته androidx.work.testing تغییر کرده است.
  • تنظیم‌کننده‌ها در Constraints دیگر بخشی از میانای برنامه‌سازی کاربردی عمومی نیستند.
  • WorkerParameters.getTriggeredContentUris() و WorkerParameters.getTriggeredContentAuthorities() آرایه‌هایی که قبلاً برگردانده شده‌اند. اکنون این روش‌ها «مجموعه‌ها» را برمی‌گردانند.
  • نام ListenableWorker.onStartWork() به ListenableWorker.startWork() تغییر کرد.
  • سازنده WorkStatus دیگر بخشی از میانای برنامه‌سازی کاربردی عمومی نیست.
  • نام Configuration.getMaxJobSchedulerID() و Configuration.getMinJobSchedulerID() به‌ترتیب به Configuration.getMinJobSchedulerId() و Configuration.getMaxJobSchedulerId() تغییر کرد.
  • همه گونه‌های روش‌های enqueue و cancel در WorkManager اکنون نوع جدید Operation را برمی‌گردانند.
  • All variants of enqueue no longer accept varargs for WorkRequests.
  • تلاش برای initialize WorkManager بیش‌از یک‌بار در هر فرایند اکنون منجر به IllegalStateException می‌شود.

۱ نوامبر ۲۰۱۸

صفحه‌بندی

صفحه‌بندی 2.1.0-beta01 بدون تغییر نسبت به 2.1.0-alpha01 منتشر شده است.

۳۰ اکتبر ۲۰۱۸

اتاق

نسخه 2.1.0-alpha02 با چند رفع اشکال و یک ویژگی جدید منتشر شد.

ویژگی‌های جدید

  • پشتیبانی برای ارجاع دادن به @DatabaseView در @Relation اضافه شد. b/117680932

رفع اشکال‌ها

  • اشکالی برطرف شد که در آن Room هنگام مشترک شدن و حذف کردن از نوع پاسخ Rx، عملیات ورودی/خروجی دیسک را در رشته اصلی انجام می‌داد. b/117201279
  • اشکالی که در آن Room نمی‌توانست مبدل نوع مناسبی برای فیلدی در کلاس موجودیت Kotlin پیدا کند برطرف شد. b/111404868
  • اشکالی برطرف شد که در آن Room کد نادرستی برای پیاده‌سازی میانای DAO حاوی روش پیش‌فرض Kotlin بدون آرگومان تولید می‌کرد. b/117527454
  • تجزیه‌کننده دستور زبان SQLite مربوط به Room به‌روزرسانی شد و مشکل عملکردی که باعث طولانی شدن زمان ساخت می‌شد برطرف شد. b/117401230

۲۹ اکتبر ۲۰۱۸

‫Navigation 1.0.0-alpha07 با رفع اشکال و تغییرات میانای برنامه‌سازی کاربردی منتشر شد.

ویژگی‌های جدید

  • کلاس جدید AppBarConfiguration به شما امکان می‌دهد سفارشی‌سازی کنید که کدام مقصدها مقصد سطح بالا درنظر گرفته شوند. برای جزئیات بیشتر، اسناد به‌روزشده را ببینید. b/117333663
  • اکنون می‌توانید آرگومان‌ها را به مقصد شروع نمودارتان منتقل کنید b/110300470
  • پیوندهای عمیق اکنون از طرح‌های سفارشی با نقطه، خط تیره، و علامت جمع پشتیبانی می‌کنند. b/112806402

تغییرات ناگهانی

  • واحد navigation-testing-ktx در navigation-testing artifact ادغام شده است و دیگر منتشر نخواهد شد.
  • ساخته navigation-testing اکنون به کتابخانه استاندارد Kotlin وابسته است. این API تغییر کرده است تا با قراردادهای Kotlin سازگارتر باشد، اما می‌توانید همچنان از آن برای آزمایش‌های نوشته‌شده در Java استفاده کنید.
  • نمودارهای پیمایش ثبت‌شده مانیفست فراداده دیگر پشتیبانی نمی‌شوند. b/118355937
  • دیگر نمی‌توان کنش‌ها را به مقصدهای <activity> پیوست کرد. aosp/785539

رفع اشکال‌ها

  • پیوندهای عمیق اکنون پارامترهای پُرسمان را به‌درستی تجزیه می‌کنند. b/110057514
  • اکنون مقصدهای فعالیت به‌درستی همه پویانمایی‌های ورود و خروج را اعمال می‌کنند. b/117145284
  • خرابی‌ای که پس‌از تغییرات پیکربندی هنگام استفاده از «راه‌یاب‌های» سفارشی رخ می‌داد برطرف شد. b/110763345

آرگومان‌های ایمن

  • آرگومان‌های ایمن اکنون وابستگی ثابتی به افزایه Android Gradle نسخه ۳.۲.۱ دارند. b/113167627
  • اکنون می‌توان برای کلاس‌های داخلی مسیر ایجاد کرد. b/117407555
  • مشکل تولید «مسیرها» به نمودار <include> برطرف شد. b/116542123

۱۲ اکتبر ۲۰۱۸

صفحه‌بندی

‫Paging 2.1.0-alpha01 با دو افزونه اصلی (حذف صفحه و کتابخانه‌های افزونه KTX برای هر آرتیفکت) و همچنین چندین تغییر دیگر در میانای برنامه‌سازی کاربردی و رفع اشکال منتشر شده است.

تغییرات میانای برنامه‌سازی کاربردی

  • PagedList.Config.Builder.setMaxSize() برای محدود کردن تعداد موارد بارشده در حافظه اضافه شد.
  • ‫androidx.paging.Config() به‌عنوان جایگزین Kotlin برای PagedList.Config.Builder اضافه شد
  • ‫androidx.paging.PagedList() به‌عنوان جایگزین Kotlin برای PagedList.Builder اضافه شد
  • ‫DataSourceFactory.toLiveData() به‌عنوان جایگزین Kotlin برای LivePagedListBuilder اضافه شد
  • ‫DataSourceFactory.toObservable() و toFlowable() به‌عنوان جایگزین‌های Kotlin برای RxPagedListBuilder اضافه شدند
  • Added AsyncPagedListDiffer.addPagedListListener() for listening to when PagedList is swapped. b/111698609
  • Added PagedListAdapter.onCurrentListChanged() variant that passes old and new list, deprecated previous variant.
  • انواع PagedListAdapter/AsyncPagedListDiffer.submitList() اضافه شد که یک فراخوانی برگشتی اضافی را می‌گیرد که اگر/وقتی pagedlist نمایش داده شود، پس‌از تفکیک، راه‌اندازی می‌شود. این کار به شما امکان می‌دهد تا تعویض PagedList را با سایر به‌روزرسانی‌های واسط کاربر همگام‌سازی کنید. b/73781068
  • PagedList.getLoadedCount() اضافه شد تا بدانید چند مورد در حافظه وجود دارد. توجه داشته باشید که اگر جای‌بان‌ها غیرفعال باشند، مقدار برگشتی همیشه برابر با .size() است.

رفع اشکال‌ها

  • رفع مشکل شرایط رقابتی هنگام مقایسه کردن درصورت استفاده مجدد از فهرست‌ها b/111591017
  • PagedList.loadAround() اکنون وقتی نمایه نامعتبر باشد IndexOutOfBoundsException را برمی‌گرداند. قبلاً ممکن بود با استثنای نامشخص دیگری ازکار بیفتد.
  • موردی را برطرف کردیم که در آن اندازه بارگیری اولیه بسیار کوچک همراه با داده‌های تغییرنکرده منجر به عدم بارگیری بیشتر می‌شد b/113122599

۱۱ اکتبر ۲۰۱۸

WorkManager

WorkManager 1.0.0-alpha10 با پشتیبانی از کار ناهمگام تحت کنترل توسعه‌دهنده منتشر شد. در این نسخهٔ پخش، تغییرات API ناسازگار با نسخه‌های قبلی وجود دارد؛ لطفاً بخش تغییرات API ناسازگار با نسخه‌های قبلی را در زیر ببینید.

پیش‌بینی می‌کنیم که WorkManager درحال ورود به مراحل نهایی دوره آلفای خود است. انتظار داریم که میانای برنامه‌سازی کاربردی در نسخه بتا پایدار باشد، بنابراین لطفاً کمی وقت بگذارید و بازخوردتان را در ردیاب مشکل ما ثبت کنید.

تغییرات میانای برنامه‌سازی کاربردی

  • همه روش‌ها و کلاس‌های deprecated قبلی، به‌ویژه سازنده پیش‌فرض Worker، برداشته شدند. این یک تغییر ناسازگار در میانای برنامه‌سازی کاربردی است.
  • نام NonBlockingWorker به ListenableWorker تغییر کرد، که اکنون یک کلاس عمومی آشکارشده و آماده استفاده است.
    • ListenableWorker دسترسی به یک روش انتزاعی را فراهم می‌کند، ListenableFuture<Payload> onStartWork() که در رشته اصلی فراخوانی می‌شود. شروع و پردازش کار به‌صورت ناهمگام به شما بستگی دارد. وقتی تمام شد، باید ListenableFuture را به‌طور مناسب به‌روز کنید. پیاده‌سازی‌های مرجع ListenableFuture در بسته Futures در alpha02 ارائه شده است (بخش WorkManager را در زیر ببینید).
    • ‫Worker‏ ListenableWorker را گسترش می‌دهد و همچنان مانند قبل با روش انتزاعی Result doWork() عمل می‌کند.
    • برخی‌از روش‌ها و اعضا از Worker به ListenableWorker منتقل شدند.
    • به‌زودی پیاده‌سازی‌های مرجع را برای ListenableWorkerهایی که از کوروتین‌های Kotlin (پس‌از انتشار نسخه‌های پایدار) و RxJava2 استفاده می‌کنند ارائه خواهیم داد.
  • میانای WorkerFactory و پیاده‌سازی عینی DefaultWorkerFactory در کلاس انتزاعی به‌نام WorkerFactory ادغام شده‌اند. پیاده‌سازی تضمین می‌کند که رفتار پیش‌فرض مبتنی بر بازتاب به‌عنوان آخرین تلاش برای هر نمونه WorkerFactory ایجادشده توسط کاربر فراخوانی می‌شود. این تغییر ناگهانی است.
  • ‫WorkManager.synchronous() و WorkContinuation.synchronous() و همه روش‌های مرتبط برداشته شد. ‫ListenableFuture<Void> به‌عنوان نوع پاسخ بسیاری از روش‌ها در میانای برنامه‌سازی کاربردی اضافه شد. این یک تغییر ناسازگار در میانای برنامه‌سازی کاربردی است.
    • اکنون می‌توانید بااستفاده از ListenableFuture به‌طور هم‌زمان دریافت و مشاهده کنید. برای مثال، WorkManager.enqueue() قبلاً void را برمی‌گرداند؛ اکنون ListenableFuture<Void> را برمی‌گرداند. می‌توانید ListenableFuture.addListener(Runnable, Executor) یا ListenableFuture.get() را فراخوانی کنید تا پس‌از تکمیل عملیات، کد را اجرا کنید.
    • توجه داشته باشید که این ListenableFutureها به شما نمی‌گویند که عملیات موفقیت‌آمیز بوده است یا نه؛ فقط می‌گویند که عملیات تمام شده است. برای پیدا کردن این اطلاعات، همچنان باید روش‌های WorkManager را زنجیره‌ای کنید.
    • ما تماس‌های cancel() را در این اشیاء نادیده می‌گیریم، زیرا گیج‌کننده هستند و استدلال درباره آن‌ها دشوار است (آیا عملیات را لغو می‌کنید یا کار حاصل را؟). این در قرارداد Future است.
    • برای حفظ برابری با روش‌های همگام getStatus*، انواع ListenableFuture را ارائه کرده‌ایم و نام موارد موجود را که LiveData را برمی‌گرداندند تغییر داده‌ایم تا به‌طور صریح «LiveData» را به‌عنوان بخشی از نام داشته باشند (برای مثال، getStatusesByIdLiveData(UUID)). این یک تغییر API شکننده است.

رفع اشکال‌ها

  • مشکل شناخته‌شده از alpha09 مربوط به فایل‌های androidx-annotations.pro تکراری برطرف شد. می‌توانید با حذف کردن exclude 'META-INF/proguard/androidx-annotations.pro' از فایل gradle، راه حل موقت را از یادداشت‌های انتشار قبلی بردارید.
  • پیکربندی‌های proguard برای حفظ سازنده جدید Worker اضافه شد. b/116296569
  • Fix potential NullPointerException in a race condition where work was REPLACEd. b/116253486 and b/116677275
  • WorkContinuation.combine() now accepts one or more WorkContinuations instead of two or more. b/117266752

تغییرات ناسازگار میانای برنامه‌سازی کاربردی

  • همه روش‌ها و کلاس‌های deprecated قبلی، به‌ویژه سازنده پیش‌فرض Worker، برداشته شد.
  • میانای WorkerFactory و پیاده‌سازی عینی DefaultWorkerFactory در کلاس انتزاعی به‌نام WorkerFactory ادغام شده‌اند.
  • ‫WorkManager.synchronous() و WorkContinuation.synchronous() حذف شد.
  • روش‌های WorkManager.getStatus*() اکنون ListenableFuture را برمی‌گردانند. ‫WorkManager.getStatus*LiveData() برگرداندن LiveData.

شاخص‌های آتی

‫1.0.0-alpha02 Futures منتشر شد.

تغییرات میانای برنامه‌سازی کاربردی

  • توسعه‌دهندگان اکنون می‌توانند از ResolvableFuture و AbstractResolvableFuture به‌عنوان پیاده‌سازی‌های عینی سبک ListenableFuture استفاده کنند.

۸ اکتبر ۲۰۱۸

اتاق

اتاق 2.1.0-alpha01 آزاد شده است.

ویژگی‌های جدید

  • FTS: Room اکنون از نهادهایی با جدول نگاشت FTS3 یا FTS4 پشتیبانی می‌کند. کلاس‌های حاشیه‌نویسی‌شده با @Entity اکنون می‌توانند با @Fts3 یا @Fts4 نیز حاشیه‌نویسی شوند تا کلاسی با جدول جستجوی کل نوشتار نگاشت‌شده اعلام شود. گزینه‌های FTS برای سفارشی‌سازی بیشتر ازطریق روش‌های حاشیه‌نویسی دردسترس است. b/62356416
  • نماها: Room اکنون از اعلام کلاس به‌عنوان پُرسمان ذخیره‌شده، که بااستفاده از حاشیه‌نویسی DatabaseView @به‌عنوان نما نیز شناخته می‌شود، پشتیبانی می‌کند. b/67033276
  • Auto Value: Room اکنون از اعلام کلاس‌های حاشیه‌نویسی‌شده AutoValue به‌عنوان موجودیت و POJO پشتیبانی می‌کند. حاشیه‌نویسی‌های Room‏ @PrimaryKey،‏ @ColumnInfo،‏ @Embedded، و @Relation اکنون می‌توانند در روش‌های انتزاعی کلاس حاشیه‌نویسی‌شده با مقدار خودکار اعلام شوند. توجه داشته باشید که این حاشیه‌نویسی باید با @CopyAnnotations نیز همراه باشد تا Room بتواند آن‌ها را به‌درستی درک کند. b/62408420
  • پشتیبانی از انواع برگشتی Rx اضافی: روش‌های DAO حاشیه‌نویسی‌شده با @Insert، @Delete، یا @Update اکنون از انواع برگشتی Rx Completable، Single<T>، و Maybe<T> پشتیبانی می‌کنند. b/63317956
  • انواع تغییرناپذیر با @Relation: Room قبلاً به فیلدهای حاشیه‌نویسی‌شده @Relation نیاز داشت تا قابل‌تنظیم باشند، اما اکنون می‌توانند پارامترهای سازنده باشند.
  • enableMultiInstanceInvalidation: یک API جدید در RoomDatabase.Builder است که امکان باطل کردن در چندین نمونه RoomDatabase را بااستفاده از یک فایل پایگاه داده فراهم می‌کند. This multi-instance invalidation mechanism also works across multiple processes. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: میانای برنامه‌سازی کاربردی جدیدی در RoomDatabase.Builder است که درصورت تنزل نسخه، پایگاه داده را به‌طور خودکار بازسازی می‌کند. b/110416954
  • ignoredColumns: یک میانای برنامه‌سازی کاربردی جدید در حاشیه‌نویسی @Entity است که می‌توان از آن برای فهرست کردن فیلدهای نادیده‌گرفته‌شده براساس نام استفاده کرد. Useful for ignoring inherited fields on an entity. b/63522075

تغییرات میانای برنامه‌سازی کاربردی / رفتار

  • mCallback and mDatabase in RoomDatabase are now @Deprecated and will be removed in the next major version of Room. b/76109329

رفع اشکال‌ها

  • دو مشکل برطرف شد که در آن‌ها Room به‌درستی از پایگاه داده خراب یا انتقال بد درطول مقداردهی اولیه بازیابی نمی‌شد. b/111504749 و b/111519144
  • اکنون Room به‌درستی از سازنده اصلی Kotlin در کلاس‌های داده استفاده می‌کند و نیاز به اعلام فیلدها به‌عنوان vars را برطرف می‌کند. b/105769985

‫۱ اکتبر ۲۰۱۸

اتاق 2.0.0 بدون تغییر از 2.0.0-rc01 آزاد شد. Paging 2.0.0 با یک رفع اشکال منتشر شده است.

صفحه‌بندی

رفع اشکال‌ها

  • خرابی‌ای که ممکن بود هنگام پیمایش بسیار سریع بااستفاده از PositionalDataSource و جای‌بان‌های b/114635383 رخ دهد برطرف شد.

۲۱ سپتامبر ۲۰۱۸

چرخه حیات 2.0.0 با یک رفع اشکال از 2.0.0-rc01 در ViewModel منتشر شد.

چرخه حیات

رفع اشکال‌ها

  • قانون ViewModel proguard که سازنده‌ها را به‌اشتباه حذف می‌کرد برطرف شد b/112230489

۲۰ سپتامبر ۲۰۱۸

‫Navigation 1.0.0-alpha06 با رفع اشکال و تغییرات میانای برنامه‌سازی کاربردی منتشر شد.

ویژگی‌های جدید

تغییرات میانای برنامه‌سازی کاربردی

  • تغییر ناسازگار: روش Navigator navigate() اکنون پارامتر Navigator.Extras را می‌گیرد.
  • روش getGraph() NavController اکنون NonNull است b/112243286

رفع اشکال‌ها

  • NavigationUI.setupWithNavController() no longer leaks views if used with views from individual destinations b/111961977
  • Navigator onSaveState() is now only called once b/112627079

آرگومان‌های ایمن

  • کلاس‌های «مسیرهای» مقصد ناوبری اکنون کلاس «مسیرهای» والد خود را درصورت وجود گسترش می‌دهند b/79871405
  • کلاس‌های Directions و Args اکنون پیاده‌سازی toString() مفیدی دارند b/111843389

۱۹ سپتامبر ۲۰۱۸

WorkManager

WorkManager 1.0.0-alpha09 با رفع اشکال، به‌روزرسانی‌های زیرساخت، و تغییرات API منتشر شد.

مشکل شناخته‌شده

اگر با این مشکل مواجه شدید: «بیش‌از یک فایل با مسیر مستقل از سیستم‌عامل META-INF/proguard/androidx-annotations.pro پیدا شد»، لطفاً کد زیر را به‌عنوان راه‌حل موقت در فایل gradle خود قرار دهید تا مشکل را در alpha10 برطرف کنیم:

شیک

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

کاتلین

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

رفع اشکال‌ها

  • Added another fix that was needed for the "100 jobs" error. b/115560696
  • Added some fixes for foreign key constraint errors due to race conditions. b/114705286
  • تماس‌های ConstraintTrackingWorker.onStopped(boolean) به Worker زیرین واگذار شد. b/114125093
  • اجرای حداقل تأخیر عقب‌نشینی صحیح برای Firebase JobDispatcher. b/113304626
  • رشته‌بندی بهبودیافته تضمین می‌کند که کتابخانه داخلی است.
  • مشکل احتمالی مربوط به حذف موارد تکراری LiveData به‌صورت داخلی را تصحیح کنید.

تغییرات میانای برنامه‌سازی کاربردی

  • اکنون می‌توانید با مشخص کردن WorkerFactory به‌عنوان بخشی از WorkManager.Configuration، نمونه‌های Worker خودتان را در زمان اجرا ایجاد کنید. کارخانه بازگشت DefaultWorkerFactory است که با رفتار نسخه‌های قبلی WorkManager مطابقت دارد.
    • سازنده‌های پیش‌فرض برای Worker و NonBlockingWorker اکنون به‌عنوان منسوخ علامت‌گذاری شده‌اند. لطفاً از سازنده جدید (Worker(Context, WorkerParameters)) استفاده کنید و super(Context, WorkerParameters) را فراخوانی کنید؛ نسخه‌های آینده WorkManager سازنده پیش‌فرض را حذف خواهند کرد.
  • ما استفاده از مصنوع جدید ListenableFuture را به‌صورت داخلی (بدون وابستگی‌های Guava) شروع کرده‌ایم. در نسخه‌های پخش آتی، ListenableFutures را به میانای برنامه‌سازی کاربردی معرفی خواهیم کرد. این تغییر از آشکار شدن نهایی NonBlockingWorker پشتیبانی خواهد کرد.
  • افزودن توانایی راه‌اندازی کار زمان‌بندی‌شده در TestDriver ازطریق TestDriver.setInitialDelayMet(UUID) و TestDriver.setPeriodDelayMet(UUID). b/113360060

تغییرات ناگهانی

  • سازنده‌های پیش‌فرض Worker و NonBlockingWorker منسوخ شده‌اند. لطفاً در اسرع وقت به سازنده جدید منتقل شوید. سازنده پیش‌فرض در نسخه‌های آینده برداشته خواهد شد.

‫۲۷ اوت ۲۰۱۸

WorkManager

‫WorkManager 1.0.0-alpha08 با رفع اشکال منتشر شد.

رفع اشکال‌ها

  • مؤلفه‌های WorkManager به‌طور صریح به‌عنوان «ناآگاه از راه‌اندازی مستقیم» برچسب‌گذاری شده‌اند تا درطول راه‌اندازی مستقیم فعال نشوند. در آینده، نسخه‌ای از WorkManager را ارائه خواهیم داد که از راه‌اندازی مستقیم آگاه است. b/112665532
  • مشکلی که باعث می‌شد کار مجدداً امتحان‌شده اجرا نشود برطرف شد. b/112604021
  • مشکل اجرا نشدن مکرر کار دوره‌ای برطرف شد (مربوط به مشکل بالا). b/112859683
  • خط‌مشی‌های عقب‌نشینی را وقتی فرایند برنامه درحال اجرا است رعایت کردیم.
  • پیام‌های استثنا در Data اصلاح شد تا نشان دهد حد مجاز ۱۰ کیلوبایت است.
  • Lowered maximum value of Configuration.setMaxSchedulerLimit(int) to 50 to account for some latency in JobScheduler processing completion. b/112817355

۱۶ اوت ۲۰۱۸

WorkManager

WorkManager 1.0.0-alpha07 با رفع اشکال و تغییرات جزئی در میانای برنامه‌سازی کاربردی منتشر شد.

رفع اشکال‌ها

  • یک پُرسمان SQL بالقوه با محدودیت‌های منفی که می‌توانست تعداد نامحدودی نتیجه برگرداند برطرف شد.
  • کاری که اجرایش تمام شده است اکنون به‌درستی همه نسخه‌های درانتظار آن کار را در «زمان‌بندی‌های» دیگر لغو می‌کند. This led to exceeding the JobScheduler jobs limit. b/111569265
  • ConcurrentModificationException در ConstraintTracker برطرف شد. b/112272753
  • حاشیه‌نویسی‌های نوع پاسخ Data.getBooleanArray(String) و Data.getIntArray(String) به‌جای @NonNull به @Nullable تغییر کرد. b/112275229

تغییرات میانای برنامه‌سازی کاربردی

  • ‫Worker اکنون کلاس جدیدی را گسترش می‌دهد، NonBlockingWorker. این موضوع بر استفاده کنونی تأثیری ندارد. در آینده، NonBlockingWorker به نهادی کاملاً پشتیبانی‌شده برای راهکارهای رشته‌سازی سفارشی تبدیل خواهد شد.
  • حاشیه‌نویسی‌های نوع پاسخ Data.getBooleanArray(String) و Data.getIntArray(String) به @Nullable به‌جای @NonNull تغییر کرد. b/112275229
  • افزونه‌های Kotlin: Map.toWorkData() منسوخ شد و workDataOf(vararg Pair<String, Any?>) سطح بالا اضافه شد تا با میاناهای برنامه‌سازی کاربردی موجود سازگارتر باشد.

۱۰ اوت ۲۰۱۸

نسخه 1.0.0-alpha05 Navigation با رفع اشکال منتشر شد.

رفع اشکال‌ها

  • اشکالی که باعث رفتار نادرست پشته برگشت می‌شد برطرف شد. b/111907708
  • رفع اشکال در equals() کلاس‌های Generated Args. b/111450897
  • رفع خرابی ساخت در Safe Args. b/109409713
  • رفع مشکل تبدیل از شناسه‌های منبع به نام‌های جاوا b/111602491
  • رفع پیام‌های خطا درباره تهی‌پذیری در افزونه Safe Args.
  • حاشیه‌نویسی‌های پوچ‌پذیری جاافتاده را اضافه کنید.

۶ اوت ۲۰۱۸

نسخه‌های AndroidX از Lifecycle،‏ Room، و Paging نسخه 2.0.0-rc01 را منتشر می‌کنند. همه مصنوعات از 2.0.0-beta01 بدون تغییر مانده‌اند.

۱ اوت ۲۰۱۸

WorkManager

‫WorkManager 1.0.0-alpha06 با رفع اشکال منتشر شد.

رفع اشکال‌ها

  • Prevent a database lock when scheduling work. b/111801342
  • رفع اشکالی که باعث می‌شود PeriodicWork در حالت «چرت زدن» طبق زمان‌بندی اجرا نشود. b/111469837
  • رفع شرایط رقابتی هنگام ردیابی محدودیت‌هایی که باعث ازکار افتادن WorkManager می‌شود. googlecodelabs/android-workmanager/issues/56
  • هنگام استفاده از WorkRequest.Builder#build()، WorkRequestهای منحصربه‌فرد ایجاد کنید. b/111408337
  • استفاده از RescheduleReceiver را فقط زمانی فعال کنید که WorkRequest به آن نیاز داشته باشد. b/111765853

۲۴ ژوئیه ۲۰۱۸

WorkManager

WorkManager 1.0.0-alpha05 با رفع اشکال‌های مهم و تغییرات ثبت گزارش منتشر شد.

تغییرات میانای برنامه‌سازی کاربردی

  • WorkManager.getInstance() اکنون با @NonNull به‌جای @Nullable حاشیه‌نویسی شده است. درعوض، اگر در موارد مقداردهی اولیه دستی، مقداردهی اولیه تک‌قلو به‌درستی انجام نشود، این روش IllegalStateException را برمی‌گرداند. این یک تغییر مخرب در میانای برنامه‌سازی کاربردی است.
  • میانای برنامه‌سازی کاربردی جدیدی (Configuration.Builder.setMinimumLoggingLevel(int)) اضافه شد که می‌تواند سطح جزئیات WorkManager را کنترل کند. به‌طور پیش‌فرض، WorkManager Log.INFO و بالاتر را ثبت می‌کند.
  • امضای Data.getString() تغییر کرده است تا دیگر مقدار پیش‌فرض نداشته باشد (به‌طور ضمنی null است). این یک تغییر مخرب در میانای برنامه‌سازی کاربردی است.
  • برخی‌از روش‌های موردنیاز فقط برای استفاده داخلی به‌عنوان @hide علامت‌گذاری شده‌اند. این شامل سازنده Constraints،‏ Data.toByteArray()، و Data.fromByteArray(byte[]) می‌شود. این یک تغییر ناسازگار در میانای برنامه‌سازی کاربردی است.

رفع اشکال‌ها

  • WorkManager دیگر در موارد شناخته‌شده پشتیبان‌گیری خودکار، کار را اجرا نمی‌کند. این امر ممکن است منجر به خرابی شده باشد. b/110564377
  • مشکل زمان‌بندی دوگانه PeriodicWorkRequest هنگام استفاده از JobScheduler برطرف شد. b/110798652
  • مشکل مربوط به عدم اجرای صحیح PeriodicWorkRequest پس‌از چرت زدن دستگاه برطرف شد. b/111469837
  • مشکل مربوط به تأخیرهای اولیه هنگام استفاده از Firebase JobDispatcher برطرف شد. b/111141023
  • برخی‌از شرایط رقابتی بالقوه و مشکلات زمان‌بندی برطرف شد.
  • BroadcastReceivers که دیگر نیاز نبود به‌درستی آزاد شد.
  • بهینه‌سازی عملکرد زمان‌بندی مجدد هنگام بازراه‌اندازی برنامه‌ها پس‌از بسته شدن اجباری.
  • Allowed TestScheduler.setAllConstraintsMet(UUID) to be called before or after enqueuing the given WorkRequest. b/111238024

تغییرات ناگهانی

  • WorkManager.getInstance() اکنون با @NonNull به‌جای @Nullable حاشیه‌نویسی شده است.
  • امضای Data.getString() تغییر کرد تا دیگر مقدار پیش‌فرض نداشته باشد (به‌طور ضمنی null است).
  • برخی‌از روش‌های موردنیاز فقط برای استفاده داخلی به‌عنوان @hide علامت‌گذاری شده‌اند. این شامل سازنده Constraints،‏ Data.toByteArray()، و Data.fromByteArray(byte[]) می‌شود.

۱۹ ژوئیه ۲۰۱۸

Navigation 1.0.0-alpha04 و افزونه gradle مرتبط با Safe Args حاوی تعدادی تغییرات API، تغییرات رفتاری، و رفع اشکال است.

تغییرات میانای برنامه‌سازی کاربردی / رفتار

  • NavHostFragment will always set the current Fragment as the primary navigation fragment, ensuring that child fragment managers are popped before the outer NavController is popped b/111345778

آرگومان‌های ایمن

  • تغییرات ناگهانی: app:type به app:argType تغییر کرده است تا از تداخل با کتابخانه‌های دیگر مانند ConstraintLayout 2.0.0-alpha1 جلوگیری شود b/111110548
  • پیام‌های خطای Safe Args اکنون قابل‌کلیک هستند b/111534438
  • کلاس‌های Args اکنون تأیید می‌کنند که مشخصه‌های NonNull درواقع تهی نیستند b/111451769
  • حاشیه‌نویسی‌های NonNull اضافی به کلاس‌های تولیدشده NavDirections و Args اضافه شده است b/111455455 b/111455456

رفع اشکال‌ها

  • مشکل دکمه برگشت سیستم پس‌از پیوند عمیق به مقصد قطعه برطرف شد b/111515685

۱۲ ژوئیه ۲۰۱۸

Navigation 1.0.0-alpha03 و افزونه gradle مرتبط با Safe Args شامل تعدادی تغییرات API، تغییرات رفتاری، و رفع اشکال است.

تغییرات میانای برنامه‌سازی کاربردی / رفتار

  • یک روش NavigationUI.setupWithNavController برای نوارابزار اضافه شده است b/109868820
  • روش NavigationUI.setupWithNavController برای CollapsingToolbarLayout اضافه شده است b/110887183
  • اکنون وقتی پشته قبلی‌ها خالی باشد یا وقتی شناسه مقصد داده‌شده در پشته قبلی‌ها نباشد، popBackStack()‎ مقدار نادرست را برمی‌گرداند b/110893637
  • FragmentNavigator اکنون عملیات پیمایش را پس‌از ذخیره شدن وضعیت توسط FragmentManager نادیده می‌گیرد و از استثناهای «Can not perform this action after onSaveInstanceState» جلوگیری می‌کند b/110987825

آرگومان‌های ایمن

  • تغییرات اساسی: نویسه‌های غیرالفباعددی در نام‌های کنش و آرگومان با نگارش شتری در نام‌های روش NavDirections مربوطه جایگزین خواهند شد
    • E.g. DemoController.index will become setDemoControllerIndex b/79995048
    • برای مثال، action_show_settings به actionShowSettings تبدیل می‌شود b/79642240
  • تغییر اساسی: اکنون آرگومان‌ها به‌طور پیش‌فرض غیرتهی درنظر گرفته می‌شوند. برای مجاز کردن مقادیر تهی در آرگومان‌های رشته‌ای و قابل‌بسته‌بندی، app:nullable="true" b/79642307 را اضافه کنید
  • اکنون می‌توانید از app:type="long" با defaultValues در قالب «123L» استفاده کنید b/79563966
  • اکنون آرگومان‌های Parcelable بااستفاده از نام کلاس کاملاً واجدشرایط برای app:type پشتیبانی می‌شوند. تنها مقدار پیش‌فرض پشتیبانی‌شده "@null" b/79563966 است
  • کلاس‌های Args اکنون equals() و hashCode() را پیاده‌سازی می‌کنند b/79642246
  • اکنون می‌توان افزونه Safe Args را روی پروژه‌های کتابخانه اعمال کرد b/80036553
  • اکنون می‌توان افزایه Safe Args را برای پروژه‌های ویژگی اعمال کرد b/110011752

رفع اشکال‌ها

  • مشکلات مربوط به پیمایش درطول روش‌های چرخه حیات Fragment برطرف شد b/109916080
  • مشکلات مربوط به پیمایش چندباره در نمودارهای تودرتو برطرف شد b/110178671
  • مشکلات هنگام استفاده از setPopUpTo با اولین مقصد در نمودار برطرف شد b/109909461
  • مشکل ارسال همه مقادیر app:defaultValue به‌عنوان رشته برطرف شد b/110710788
  • ‫aapt2 همراه با «افزایه Android Gradle» نسخه ۳.۲ بتا ۰۱ اکنون قوانین نگهداری را برای هر مشخصه android:name در فایل‌های XML «پیمایش» اضافه می‌کند b/79874119
  • نشت حافظه هنگام جایگزینی FragmentNavigator پیش‌فرض برطرف شد b/110900142

۲ ژوئیه ۲۰۱۸

نسخه‌های AndroidX از Lifecycle،‏ Room، و Paging نسخه 2.0.0-beta01 را منتشر می‌کنند.

چرخه حیات

رفع اشکال‌ها

  • قانون proguard مربوط به LifecycleObserver اصلاح شد تا فقط پیاده‌سازی‌ها حفظ شوند، نه زیرمیاناهای b/71389427
  • قوانین ViewModel proguard برای مجاز کردن مبهم‌سازی و کوچک‌سازی اصلاح شد

اتاق

تغییرات میانای برنامه‌سازی کاربردی / رفتار

  • ‫RoomDatabase.Builder.setQueryExecutor() اضافه شد تا امکان سفارشی‌سازی محل اجرای پُرسمان‌ها فراهم شود
  • پشتیبانی RxJava2 Observable اضافه شد
  • پیاده‌سازی‌های DAO و پایگاه داده تولیدشده اکنون نهایی هستند

رفع اشکال‌ها

  • Specify class/field name in "cannot find getter for field" error b/73334503
  • سازگاری RoomOpenHelper با نسخه‌های قدیمی‌تر Room برطرف شد b/110197391

صفحه‌بندی

رفع اشکال‌ها

  • مشکل ناپدید شدن محتوا در برخی موارد پیش‌افزودن (جای‌بان‌ها غیرفعال، PositionalDataSource) برطرف شد b/80149146
  • (قبلاً در 1.0.1 منتشر شده است) خرابی‌هایی که در آن‌ها PagedListAdapter و AsyncPagedListDiffer نمی‌توانستند رویدادهای جابه‌جایی را علامت‌گذاری کنند برطرف شد. b/110711937

۲۶ ژوئن ۲۰۱۸

صفحه‌بندی

Paging 1.0.1 با یک رفع اشکال در runtime منتشر شد. برای پایداری، اکیداً توصیه می‌کنیم از 1.0.1 استفاده کنید. ‫Paging RxJava2 1.0.1 نیز منتشر شده است و با 1.0.0-rc1 یکسان است.

رفع اشکال‌ها

  • خرابی‌هایی که در آن‌ها PagedListAdapter و AsyncPagedListDiffer نمی‌توانستند رویدادهای انتقال را علامت‌گذاری کنند برطرف شد. b/110711937

WorkManager

‫WorkManager 1.0.0-alpha04 منتشر شده است.

رفع اشکال‌ها

  • اکنون PeriodicWorkRequestها هنگام استفاده از پیاده‌سازی مبتنی بر AlarmManager به‌درستی زمان‌بندی مجدد می‌شوند.

  • رفع خطای احتمالی ANR هنگام زمان‌بندی مجدد همه کارگران پس‌از توقف اجباری یا بازراه‌اندازی. b/110507716

  • حاشیه‌نویسی‌های پوچ‌پذیری به WorkManager APIهای مختلف اضافه شد. b/110344065

  • ثبت موارد استثنای جاافتاده که درطول اجرای Worker رخ می‌دهد. b/109900862

  • انتقال‌های مخرب پایگاه داده درصورتی‌که تصمیم بگیرید به نسخه قدیمی‌تر WorkManager برگردید مجاز شد. b/74633270

  • مشکل ازکارافتادن انتقال درصورت ایجاد برچسب‌های ضمنی تکراری برطرف شد. این مشکل بسیار نادری است که فقط درصورتی رخ می‌دهد که خودتان از همان قالب برچسب ضمنی استفاده کرده باشید.

۱۹ ژوئن ۲۰۱۸

اتاق

اتاق 1.1.1 آزاد شده است. این نسخهٔ پخش با «اتاق 1.1.1-rc1» یکسان است.

WorkManager

‫WorkManager 1.0.0-alpha03 منتشر شده است.

رفع اشکال‌ها

  • شرایط رقابت در پیاده‌سازی مبتنی بر AlarmManager برطرف شد. b/80346526.

  • مشکل کارهای تکراری هنگام استفاده از JobScheduler پس‌از بازراه‌اندازی دستگاه برطرف شد.

  • اکنون کارهای دارای راه‌اندازهای شناسه منبع یکسان محتوا در راه‌اندازی‌های مجدد حفظ می‌شوند. b/80234744

  • به‌روزرسانی‌های اسناد. b/109827628،‏ b/109758949،‏ b/80230748

  • مشکل ازکارافتادن هنگام قرار دادن مجدد WorkRequest در صف برطرف شد. b/109572353.

  • هشدارهای کامپایلر Kotlin هنگام استفاده از وابستگی work-runtime-ktx برطرف شد.

  • ‫WorkManager اکنون از Room نسخه 1.1.1-rc1 استفاده می‌کند.

تغییرات میانای برنامه‌سازی کاربردی

  • ‫getStatusesSync()، نسخه همگام WorkContinuation.getStatuses()، اضافه شد.

  • Worker می‌تواند بین لغو شروع‌شده توسط کاربر و توقف موقت درخواست‌شده توسط سیستم‌عامل تمایز قائل شود. اگر هر نوع توقفی درخواست شده باشد، Worker.isStopped() مقدار true را برمی‌گرداند. Worker.isCancelled() returns true when the work has been explicitly cancelled. b/79632247

  • افزودن پشتیبانی از JobParameters#getNetwork() در API 28. این مورد ازطریق Worker.getNetwork() افشا شده است.

  • Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit) اضافه شد تا بتوانید تعداد کارهایی را که می‌توان به JobScheduler یا AlarmManager ارسال کرد اعمال کنید. این کار کمک می‌کند تا WorkManager همه جایگاه‌های JobScheduler دردسترس شما را نگیرد.

  • Added Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId) which helps define a range of JobScheduler job ids safe for WorkManager to use. b/79996760

  • Worker.getRunAttemptCount() تعداد دفعات اجرای فعلی را برای Worker داده‌شده برمی‌گرداند. b/79716516

  • WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) allows you to enqueue a unique PeriodicWorkRequests. b/79600647

  • WorkManager.cancelAllWork() همه Workerها را لغو می‌کند. کتابخانه‌هایی که به WorkManager وابسته هستند می‌توانند بااستفاده از WorkManager.getLastCancelAllTimeMillis() برای پاک‌سازی بیشتر وضعیت داخلی، زمان آخرین فراخوانی این روش را پُرسمان کنند.

  • ‫WorkManager.pruneWork() برای برداشتن کارهای تکمیل‌شده از پایگاه داده داخلی اضافه شد. b/79950952، b/109710758

تغییرات رفتار

  • برچسب ضمنی برای همه WorkRequestها اضافه شد که نام کلاس کاملاً واجدشرایط برای Worker است. This allows the ability to remove WorkRequests without tags or when the id is not available. b/109572351

تغییرات ناگهانی

  • نام Worker.WorkerResult به Worker.Result تغییر کرد.

  • Worker.onStopped اکنون پارامتر اضافی isCancelled دارد که وقتی Worker صریحاً لغو شده باشد، روی true تنظیم می‌شود.

۷ ژوئن ۲۰۱۸

ناوبری 1.0.0-alpha02 منتشر شده است.

تغییرات رفتار

  • ‫FragmentNavigator اکنون از setReorderingAllowed(true) استفاده می‌کند. b/109826220

  • اکنون Navigation آرگومان‌های تجزیه‌شده از نشانی‌های وب پیوند عمیق را URLDecodes می‌کند. b/79982454

رفع اشکال‌ها

  • IllegalStateException هنگام فراخوانی پیمایش از روش‌های چرخه حیات Fragment برطرف شد. b/79632233

  • اکنون «ناوبری» به «کتابخانه پشتیبانی» نسخه ۲۷.۱.۱ وابسته است تا لرزش تصویر هنگام استفاده از پویانمایی‌ها برطرف شود. b/80160903

  • IllegalArgumentException هنگام استفاده از defaultNavHost="true" به‌عنوان قطعه فرزند برطرف شد. b/79656847

  • StackOverflowError هنگام استفاده از NavDeepLinkBuilder برطرف شد. b/109653065

  • IllegalArgumentException هنگام پیمایش به عقب به نمودار تودرتو برطرف شد. b/80453447

  • مشکل هم‌پوشانی Fragment هنگام استفاده از launchSingleTop برطرف شد. b/79407969

  • اکنون پیمایش پشته قبلی‌های مصنوعی صحیح را برای گراف‌های تودرتو می‌سازد. b/79734195

  • اکنون NavigationUI هنگام استفاده از گراف تودرتو به‌عنوان MenuItem، مورد صحیح را برجسته می‌کند. b/109675998

تغییرات میانای برنامه‌سازی کاربردی

  • مشخصه clearTask برای کنش‌ها و API مرتبط در NavOptions منسوخ شده است. b/80338878

  • مشخصه launchDocument برای کنش‌ها و API مرتبط در NavOptions منسوخ شده است. b/109806636

۲۴ مه ۲۰۱۸

‫WorkManager 1.0.0-alpha02 منتشر شده است.

WorkManager

رفع اشکال‌ها

  • ‫NullPointerException در State.isFinished() برطرف شد. b/79550068

  • مشکلی که باعث می‌شد Worker در Application.onCreate() دوباره زمان‌بندی شود برطرف شد. b/79660657

  • مشکلی که باعث می‌شد بتوانید کارهای بیشتری از آنچه سیستم‌عامل اجازه می‌دهد زمان‌بندی کنید برطرف شد. b/79497378

  • پاکسازی wake lock مرتبط با Worker به رشته پس‌زمینه منتقل شد.

  • اکنون پیاده‌سازی AlarmManager پس‌از تکمیل همه کارهای معلقه به‌درستی پاک‌سازی می‌شود.

  • پرس‌وجوهای SQL پاک‌سازی که بر زبان‌های غیرانگلیسی تأثیر می‌گذاشتند برطرف شد. b/80065360

  • پشتیبانی از float در Data اضافه شد. b/79443878

  • Data.Builder.putAll() اکنون نمونه‌ای از Builder را برمی‌گرداند. b/79699162

  • More javadoc and fixes in documentation. b/79691663

تغییرات میانای برنامه‌سازی کاربردی

  • Workers can react to being stopped. از Worker.isStopped() می‌توان برای بررسی اینکه آیا Worker متوقف شده است یا نه استفاده کرد. از Worker.onStopped() می‌توان برای انجام عملیات پاک‌سازی سبک استفاده کرد.

  • Worker.getTags() API یک Set از برچسب‌های مرتبط با Worker را برمی‌گرداند.

  • javax.time.Duration سربار برای میاناهای برنامه‌سازی کاربردی که ترکیبی از مدت و TimeUnit هستند اضافه شد. این مورد توسط @RequiresApi(26) محافظت می‌شود.

  • ‫WorkManager افزونه از بسته androidx.work.ktx به بسته androidx.work منتقل شده است. افزونه‌های قدیمی منسوخ شده‌اند و در نسخه‌های بعدی برداشته خواهند شد.

  • ‫Configuration.withExecutor() منسوخ شده است. درعوض از Configuration.setExecutor() استفاده کنید.

۱۶ مه ۲۰۱۸

Paging RxJava2 1.0.0-rc1 و Room 1.1.1-rc1 منتشر شده‌اند. اگر از انتقال استفاده می‌کنید، اکیداً توصیه می‌کنیم به‌جای 1.1.0 از Room 1.1.1-rc1 استفاده کنید.

اتاق

اشکالی که باعث می‌شد Room مقداردهی اولیه پس‌از انتقال را به‌درستی انجام ندهد برطرف شد b/79362399

صفحه‌بندی

‫Paging rxjava2 درحال انتقال به نامزد انتشار است و هیچ تغییری نسبت به نسخه آلفای اولیه ندارد.

۸ مه ۲۰۱۸

Paging 1.0, Navigation and WorkManager Alphas, Room 1.1, AndroidX

Paging 1.0.0 و Room 1.1.0 منتشر شدند، همراه با نسخه‌های آلفا برای دو مؤلفه معماری جدید - Navigation و WorkManager.

Paging و Room از زمان آخرین نامزدهای انتشار تغییری نکرده‌اند.

کتابخانه جدید: پیمایش

Navigation چارچوبی برای ساختن ناوبری درون‌برنامه ارائه می‌دهد. این نسخهٔ پخش اولیه 1.0.0-alpha01 است.

کتابخانه جدید: WorkManager

WorkManager زمان‌بندی و اجرای کار پس‌زمینه‌ای تضمین‌شده و آگاه از محدودیت را ساده می‌کند. این نسخهٔ پخش اولیه 1.0.0-alpha01 است.

AndroidX

اجزای معماری درحال انتقال به AndroidX هستند، ازجمله نام‌های بسته به‌روزشده، نام‌های آرتیفکت، و وابستگی‌ها به دیگر کتابخانه‌های AndroidX. این موارد تحت نسخه 2.0.0-alpha1 برای استفاده همراه با دیگر کتابخانه‌های AndroidX منتشر شده‌اند.

افزونه‌های Kotlin

ViewModel،‏ ReactiveStreams، و Sqlite (قبلاً مؤلفه «پایگاه داده» Room) همگی دارای کتابخانه‌های افزونه Kotlin هستند که به‌عنوان بخشی از نسخه آلفای AndroidX اضافه شده‌اند. علاوه‌براین، Navigation و WorkManager شامل پیمانه‌های ktx- هستند. هرکدام از این مدول‌های افزونه را می‌توانید در افزودن مؤلفه‌ها پیدا کنید.

۲ مه ۲۰۱۸

  • نامزد انتشار نسخه ۱.۱.۰ Room
  • اتاق 1.1.0-rc1 آزاد شده است.

رفع اشکال‌ها

  • اکنون Room با Kotlin 1.2.40 سازگار است. b/78328708

‫۱۹ آوریل ۲۰۱۸

نامزد انتشار صفحه‌بندی

صفحه‌بندی 1.0.0-rc1 و اتاق 1.1.0-beta3 آزاد شدند.

صفحه‌بندی

مشکل شناخته‌شده دیگری نداریم و ویژگی جدیدی برای نسخه Paging 1.0.0 برنامه‌ریزی نشده است. لطفاً پروژه‌هایتان را ارتقا دهید تا از 1.0.0-rc1 استفاده کنید و به ما کمک کنید آن را آزمایش کنیم تا بتوانیم 1.0.0 را به‌صورت کاملاً پایدار عرضه کنیم.

هیچ تغییری در این نسخه پخش وجود ندارد، این نسخه پخش همانند 1.0.0-beta1 است.

اتاق

رفع اشکال‌ها

  • رفع خطای کامپایل زمانی که Kotlin POJO به موجودیت رابطه‌ای ارجاع می‌دهد که در Java تعریف شده است b/78199923

۵ آوریل ۲۰۱۸

Room 1.1.0-beta2،‏ Paging 1.0.0-beta1، و Paging RxJava 1.0.0-alpha1 منتشر شده‌اند.

صفحه‌بندی برای مدت کوتاهی در نسخه بتا خواهد بود و سپس به نامزد انتشار ارتقا می‌یابد. ما قصد نداریم تغییرات بیشتری در میانای برنامه‌سازی کاربردی برای Paging 1.0 ایجاد کنیم و مانع هرگونه تغییر در میانای برنامه‌سازی کاربردی بسیار بالا است.

پشتیبانی Alpha RxJava2 برای «صفحه‌بندی» به‌عنوان یک ماژول اختیاری جداگانه (android.arch.paging:rxjava2:1.0.0-alpha1) منتشر شده است و تا زمانی که پایدار شود، به‌طور موقت به‌صورت جداگانه نسخه‌بندی خواهد شد.

این کتابخانه جدید جایگزین RxJava2 برای LivePagedListBuilder ارائه می‌دهد که قادر به ساختن Observable و Flowable است و به‌جای Executor، Scheduler می‌گیرد:

کاتلین

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

جاوا

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

صفحه‌بندی

ویژگی‌های جدید

  • ‫RxPagedListBuilder ازطریق مصنوع جدید android.arch.paging:rxjava2 اضافه شده است.

تغییرات میانای برنامه‌سازی کاربردی

  • تغییرات API برای شفاف‌سازی نقش مجریان در سازندگان:

    • نام setBackgroundThreadExecutor() به setFetchExecutor() تغییر کرد (در PagedList.Builder و LivePagedListBuilder)

    • نام setMainThreadExecutor() به setNotifyExecutor() تغییر کرد (در PagedList.Builder).

  • عضو ثابت PagedList.mCallbacks خصوصی شد.

رفع اشکال‌ها

  • LivePagedListBuilder بار اولیه PagedList را در مجری مشخص‌شده راه‌اندازی می‌کند، به‌جای استخر رشته IO مؤلفه‌های Arch.

  • رفتار باطل‌سازی در پوشاننده‌های داخلی DataSource (که برای پیاده‌سازی DataSource.map، و همچنین بار کردن PositionalDataSource با جای‌بان غیرفعال‌شده استفاده می‌شود) اصلاح شد b/77237534

اتاق

رفع اشکال‌ها

  • اشکال مهمی در پیاده‌سازی‌های Rx Single و Maybe در Room برطرف شد که در آن پرس‌وجو را زودتر از موعد بازیافت می‌کرد و اگر بیش‌از ۱ ناظر به نمونه‌های Single یا Maybe برگردانده‌شده اضافه می‌کردید، مشکلاتی ایجاد می‌کرد. b/76031240

  • RoomDatabase.clearAllTables will not VACUUM the database if it is called inside a transaction. b/77235565

۲۱ مارس ۲۰۱۸

Room 1.1.0-beta1،‏ Paging 1.0.0-alpha7، و Lifecycles 1.1.1 منتشر شدند.

اتاق

تغییرات میانای برنامه‌سازی کاربردی

  • براساس بازخورد «بازبینی میانای برنامه‌سازی کاربردی»، @RawQuery دیگر ارسال String را به‌عنوان پارامتر پُرسمان نمی‌پذیرد. باید از SupportSQLiteQuery استفاده کنید. (برای ایجاد آسان نمونه‌ای از SupportSQLiteQuery با پشتیبانی از آرگومان، SimpleSQLiteQuery را ببینید).
  • روش fallbackToDestructiveMigrationFrom مربوط به RoomDatabase.Builder اکنون به‌جای vararg Integer، vararg int را می‌پذیرد.

رفع اشکال‌ها

  • RoomDatabase.clearAllTables اکنون با تنظیم نقطه بازرسی WAL و VACUUM کردن پایگاه داده، سعی می‌کند فضا را به سیستم‌عامل برگرداند.

  • @RawQuery اکنون هر Pojo را برای ویژگی observedEntities می‌پذیرد، به‌شرطی که Pojo ازطریق فیلدهای Embedded یا Relation به یک یا چند نهاد ارجاع دهد. b/74041772

  • صفحه‌بندی: پیاده‌سازی DataSource اتاق اکنون وابستگی‌های چندجدولی (مانند روابط و پیوندها) را به‌درستی مدیریت می‌کند. قبلاً این موارد نمی‌توانستند نتایج جدید را راه‌اندازی کنند یا ممکن بود کامپایل نشوند. b/74128314

چرخه‌های حیات

فقط یک تغییر کوچک: android.arch.core.util.Function از arch:runtime به arch:common منتقل شده است. این کار امکان استفاده بدون وابستگی زمان اجرا را فراهم می‌کند، مثلاً در paging:common زیر.

lifecycle:common وابستگی lifecycle:runtime است، بنابراین این تغییر مستقیماً بر lifecycle:runtime تأثیر نمی‌گذارد، بلکه فقط بر واحدهایی تأثیر می‌گذارد که مستقیماً به lifecycle:common وابسته هستند، مانند Paging.

صفحه‌بندی

Paging 1.0.0-alpha7 همراه با Lifecycles 1.1.1 منتشر می‌شود. ازآنجایی‌که Paging alpha7 به انتقال کلاس Function که در بالا ذکر شد بستگی دارد، باید وابستگی lifecycle:runtime را به android.arch.lifecycle:runtime:1.1.1 به‌روز کنید.

قرار است Paging alpha7 آخرین نسخه قبل‌از انتشار نسخه بتای Paging باشد.

تغییرات میانای برنامه‌سازی کاربردی

  • اکنون اشیای DataSource.LoadParams سازنده عمومی دارند و اشیای DataSource.LoadCallback اکنون انتزاعی هستند. This enables wrapping a DataSource or directly testing a DataSource with a mock callback. b/72600421
  • نگاشت‌کننده‌ها برای DataSource و DataSource.Factory
    • map(Function<IN,OUT>) به شما امکان می‌دهد نتایج بارشده توسط DataSource را تبدیل، بسته‌بندی، یا تزئین کنید.
    • mapByPage(<List<IN>,List<OUT>>) همین کار را برای پردازش دسته‌ای فعال می‌کند (برای مثال، اگر موارد بارشده از SQL نیاز به پُرسمان اضافی از پایگاه داده جداگانه‌ای داشته باشند، این کار می‌تواند به‌صورت دسته‌ای انجام شود.)
  • PagedList#getDataSource() is added as a convenience method b/72611341
  • همه کلاس‌های منسوخ‌شده از میانای برنامه‌سازی کاربردی برداشته شده‌اند، ازجمله بقایای بسته recyclerview.extensions و LivePagedListProvider.
  • DataSource.Factory از میانای به کلاس انتزاعی تغییر کرده است تا عملکرد نقشه فعال شود.

رفع اشکال‌ها

  • Builders به final تغییر کرد. b/70848565
  • پیاده‌سازی Room DataSource اکنون برای رسیدگی به پُرسمان‌های چندجدولی اصلاح شده است - این اصلاح در Room 1.1.0-beta1 گنجانده شده است، بالا را ببینید.
  • اشکالی برطرف شد که در آن اگر جای‌بان‌ها فعال باشند و اندازه کل مضرب دقیقی از اندازه صفحه باشد، BoundaryCallback.onItemAtEndLoaded برای PositionalDataSource فراخوانی نمی‌شد.

۲ مارس ۲۰۱۸

اتاق 1.1.0-alpha3 آزاد شده است. این آخرین نسخه آلفای برنامه‌ریزی‌شده برای Room 1.1.0 است.

تغییرات میانای برنامه‌سازی کاربردی

  • روش‌های addObserver و removeObserver مربوط به InvalidationTracker اکنون همگام هستند و باید در رشته غیرمیانای کاربر فراخوانی شوند. این کار از برخی شرایط رقابتی هنگام مشاهده جدول‌ها جلوگیری می‌کند.

  • روش clearAllTables() جدیدی در کلاس RoomDatabase وجود دارد که همه محتویات جدول را کوتاه می‌کند. b/63807999

  • ‫SupportSQLiteQuery اکنون روش getArgCount() دارد که تعداد پارامترهای پُرسمان را برمی‌گرداند. b/67038952

رفع اشکال‌ها

  • @RawQuery اکنون به‌درستی برای پُرسمان‌های صفحه‌بندی پشتیبانی می‌شود. b/72600425

  • اکنون Room کلاس‌های Dao تولیدشده را به‌درستی نام‌گذاری می‌کند تا از تداخل نام در شرایطی که ۲ یا چند میانای Dao کلاس‌های داخلی در یک بسته باشند و نام یکسانی داشته باشند جلوگیری شود. b/73536380

  • انواع فیلد عمومی در Pojo به‌درستی به‌عنوان عضو کلاس گسترش‌دهنده تجزیه می‌شود. b/73534868

  • پارامترهای پُرسمان در میاناهای Dao که از مصنوعات وابستگی به ارث برده شده‌اند اکنون به‌درستی تجزیه می‌شوند. b/68118746

  • پرس‌وجوهای تولیدشده برای @Relation اکنون به‌درستی از نام‌های فیلد فرار می‌کنند. b/70925483

‫۲۷ فوریه ۲۰۱۸

صفحه‌بندی 1.0.0-alpha6 همراه با نسخه ۲۷.۱.۰ «کتابخانه پشتیبانی» منتشر شده است. ListAdapter و چند کلاس مرتبط از «کتابخانه صفحه‌بندی» مستقیماً به Recyclerview منتقل شده‌اند و نام چند کلاس نیز تغییر کرده است تا عملکرد کلاس‌های خاصی واضح‌تر شود. این نسخه آلفای صفحه‌بندی احتمالاً آخرین نسخه‌ای است که تغییرات اساسی در API دارد.

تغییرات میانای برنامه‌سازی کاربردی

  • کلاس‌ها به recyclerview-v7 منتقل شدند:
    • ListAdapter
  • کلاس‌ها تغییر نام داده‌اند و به recyclerview-v7 منتقل شده‌اند:
    • ‫ListAdapterHelper -> AsyncListDiffer
    • ‫ListAdapterConfig -> AsyncDifferConfig
    • ‫DiffCallback -> DiffUtil.ItemCallback
  • کلاس‌های تغییرنام‌یافته در paging-runtime:
    • ‫PagedListAdapterHelper -> AsyncPagedListDiffer

کلاس‌هایی که منتقل شدند در کنار RecyclerView، مستقل از «کتابخانه صفحه‌بندی»، مفید بودند. این یعنی می‌توان از آن‌ها بدون وابستگی به نسخه آلفای Paging استفاده کرد، اما همچنین یعنی برنامه‌هایی که از Paging استفاده می‌کنند باید هم‌زمان به Alpha 6 و Support Library 27.1.0 ارتقا یابند.

** راهنمای انتقال برای Paging Alpha6: **

  • به‌روزرسانی وابستگی‌های صفحه‌بندی و recyclerview به android.arch.paging:runtime:1.0.0-alpha6 و com.android.support:recyclerview-v7:27.1.0
    • این کارها باید هم‌زمان انجام شود، زیرا ListAdapter از Paging به RecyclerView منتقل شده است
  • به‌روزرسانی هرگونه ارجاع ListAdapterHelper به AsyncListDiffer
    • ‫getItem(index)/getItemCount() برداشته شده‌اند تا از الگوی فراخوانی getCurrentList().getItem(index) و getCurrentList().size() که صریح‌تر هستند استفاده شود.
  • هرگونه ارجاع به ListAdapterConfig را به AsyncDifferConfig به‌روز کنید
  • به‌روزرسانی هرگونه ارجاع DiffCallback به DiffUtil.IttemCallback
  • به‌روزرسانی هرگونه ارجاع PagedListAdapterHelper به AsyncPagedListDiffer
  • به‌روزرسانی مرجع‌های setList() به submitList()
    • renamed to clarify async nature of list diffing

رفع اشکال‌ها

  • مشکل ارسال موقعیت اولیه نادرست به بار اولیه درصورت غیرفعال بودن جای‌بان‌ها برطرف شد. b/73513780

۱۵ فوریه ۲۰۱۸

اتاق 1.1.0-alpha2 آزاد شده است.

ویژگی‌های جدید

  • اکنون Room از باز کردن پایگاه داده در حالت ثبت پیش‌نویس پشتیبانی می‌کند. در این حالت، نوشتن‌های شما دیگر پرسمان‌های خواندن شما را مسدود نخواهد کرد. هرچند این حالت حافظه بیشتری مصرف می‌کند (به‌دلیل اتصالات متعدد)، معمولاً سریع‌تر است. به‌طور پیش‌فرض، اگر دستگاه API 16 یا بالاتر باشد و دستگاهی با حافظه کم نباشد، Room از WAL استفاده خواهد کرد. می‌توانید این رفتار را بااستفاده از روش setJournalMode() در RoomDatabase.Builder کنترل کنید. b/67757002

  • پشتیبانی Guava: Room اکنون از برگرداندن Guava Optional<T> یا ListenableFuture<T> در پُرسمان‌های DAO پشتیبانی می‌کند. برای استفاده از ListenableFuture<T>، باید مصنوع guava را از «اتاق» (android.arch.persistence.room:guava:1.1.0-alpha2) وارد کنید.

  • Room اکنون از برگرداندن java.util.Optional<T> از پُرسمان‌های DAO پشتیبانی می‌کند.

  • روش‌های میانای دارای پیاده‌سازی‌های پیش‌فرض اکنون در @Transaction روش در کلاس‌های DAO پشتیبانی می‌شود. این ویژگی هم برای Java 8 و هم برای Kotlin کار می‌کند. b/72416735

رفع اشکال‌ها

  • سازنده‌های دارای @Relation باعث خطای کامپایل نمی‌شوند اگر سازنده دیگری وجود داشته باشد که بتوان از آن استفاده کرد. b/72884434

  • نام‌های جدول که با ' در روش‌های @Query گریز داده شده‌اند اکنون به‌درستی برای ردیاب باطل‌سازی گریز داده می‌شوند. b/72366965

  • Room اکنون از حاشیه‌نویسی‌های Kotlin @Metadata برای خواندن ساختار کلاس درطول پردازش حاشیه‌نویسی استفاده می‌کند. این یعنی حتی اگر pojo از وابستگی به ارث برده شود، نام‌های پارامتر سازنده آن به‌درستی خوانده می‌شود. b/67181813

  • مشکل مربوط به پیدا کردن مسیرهای انتقال تنزل رفع شد. b/72153525

  • انواع ستون غیرپیش‌فرض اکنون هنگام انتقال از پایگاه داده موجود به Room به‌درستی مدیریت می‌شوند. b/71953987

  • Room اکنون به‌درستی فیلدهای boolean? را در کلاس‌های Kotlin حفظ می‌کند. b/72786402

۲۲ ژانویه ۲۰۱۸

Lifecycles 1.1.0،‏ Room 1.1.0-alpha1، و Paging 1.0.0-alpha5 منتشر شدند.

Lifecycle 1.1.0

تغییرات بسته‌بندی

اکنون وابستگی‌های جدید و بسیار کوچک‌تری دردسترس است:

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

تغییرات میانای برنامه‌سازی کاربردی

  • LifecycleActivity و LifecycleFragment منسوخ‌شده اکنون برداشته شده‌اند - لطفاً از FragmentActivity، AppCompatActivity، یا پشتیبانی Fragment استفاده کنید.
  • ‫@NonNull حاشیه‌نویسی به ViewModelProviders و ViewModelStores اضافه شد
  • سازنده ViewModelProviders منسوخ شده است - لطفاً مستقیماً از روش‌های ایستا استفاده کنید
  • ‫ViewModelProviders.DefaultFactory منسوخ شده است - لطفاً از ViewModelProvider.AndroidViewModelFactory استفاده کنید
  • روش ایستا ViewModelProvider.AndroidViewModelFactory.getInstance(Application) برای بازیابی Factory ایستا مناسب برای ایجاد نمونه‌های ViewModel و AndroidViewModel اضافه شده است.

Room 1.1.0-alpha1

ویژگی‌های جدید

  • RawQuery: این API جدید به روش‌های @Dao اجازه می‌دهد SQL را به‌عنوان پارامتر پُرسمان دریافت کنند b/62103290، b/71458963
  • fallBackToDestructiveMigrationsFrom: این میانای برنامه‌سازی کاربردی جدید در RoomDatabase.Builder امکان کنترل دقیق‌تر بر نسخه‌های طرح‌واره شروعی را که انتقال‌های مخرب از آن‌ها مجاز است فراهم می‌کند (درمقایسه با fallbackToDestructiveMigration) b/64989640
  • Room اکنون فقط از میاناهای برنامه‌سازی کاربردی صفحه‌بندی جدیدتر (alpha-4+) پشتیبانی می‌کند و پشتیبانی از LivePagedListProvider منسوخ‌شده را متوقف کرده است. برای استفاده از Room alpha جدید، باید از صفحه‌بندی alpha-4 یا بالاتر استفاده کنید و اگر قبلاً این کار را نکرده‌اید، از LivePagedListProvider به LivePagedListBuilder بروید.

رفع اشکال‌ها

  • پشتیبانی از انواع Kotlin Kapt بهبود یافته است. b/69164099
  • ترتیب فیلدها دیگر طرح‌واره را نامعتبر نمی‌کند. b/64290754

Paging 1.0.0-alpha5

رفع اشکال‌ها

  • Fix page loading when placeholders are disabled b/70573345
  • ثبت گزارش اضافی برای ردیابی اشکال IllegalArgumentException b/70360195 (و اصلاح حدسی در Room-side)
  • اصلاحات کد نمونه Javadoc b/70411933،‏ b/71467637

۱۱ دسامبر ۲۰۱۷

پیجینگ alpha4-1 منتشر شده است. این نسخه رفع اشکال کوچکی برای Paging alpha 4 است.

رفع اشکال‌ها

۷ دسامبر ۲۰۱۷

Paging alpha4 با تغییرات و اضافات قابل‌توجهی منتشر شده است که بیشتر شبکه و موارد استفاده از شبکه + پایگاه داده را هدف قرار می‌دهد.

تغییرات میانای برنامه‌سازی کاربردی

  • DataSource اکنون یک میانای برنامه‌سازی کاربردی ناهمگام است تا صفحه‌بندی مستقیماً از شبکه آسان‌تر شود:

    • نقطه ورودی تکی برای اندازه و داده‌های اولیه
    • با نگه داشتن تماس برگشتی و ارسال آن در زمانی دیگر، از تکرار شبکه پشتیبانی می‌کند
    • فراخوان‌های برگشتی Threadsafe امکان بار کردن ناهمگام را برای ایجاد PagedList با پشتیبانی شبکه واحد در رشته میانای کاربر فراهم می‌کند.
    • رفتار خطای واضح‌تر درباره پارامترهای بار اولیه
  • TiledDataSource به PositionalDataSource تغییر نام داده است تا نمایه‌سازی مبتنی بر موقعیت آن و این واقعیت را که وقتی جای‌بان‌ها غیرفعال هستند کاشی‌بندی نمی‌شود نشان دهد.

  • PageKeyedDataSource برای پشتیبانی از کدهای بعدی/قبلی جاسازی‌شده در بارگیری‌های صفحه شبکه اضافه شده است. نام KeyedDataSource به ItemKeyedDataSource تغییر کرد تا تفاوت واضح باشد.

  • LivePagedListBuilder و DataSource.Factory جایگزین LivePagedListProvider می‌شوند. سازنده همان قابلیت را با سفارشی‌سازی بیشتر و پیش‌فرض‌های ساده‌تر ارائه می‌دهد. کارخانه اجازه می‌دهد کد تولید DataSource مستقل از LiveData باقی بماند.

  • PagedList.BoundaryCallback برای مورد استفاده پایگاه داده + شبکه اضافه شد.

  • سازنده PagedList.Builder اکنون DataSource + PagedList.Config را می‌گیرد، بیشتر شبیه LivePagedListBuilder است، و عملگر لوزی را در زبان Java یا انواع استنباط‌شده را در Kotlin مجاز می‌کند.

  • PagedList.getConfig() اضافه شد و PagedList.Config اکنون ویژگی‌های عضو عمومی دارد.

  • KeyedDataSource.loadBefore() دیگر انتظار ندارد نتایج برگردانده شود.

  • PagedListAdapter.onCurrentListChanged() added to listen for updates on which PagedList is being displayed.

رفع اشکال‌ها

  • رفع IndexOutOfBoundsException در PagedListAdapter(Helper) b/67883658

‫۱.۰.۰ - ۶ نوامبر ۲۰۱۷

همه مؤلفه‌های اصلی (به‌جز Paging) اکنون 1.0.0 هستند. این دقیقاً همان نسخه rc1 است، به‌جز یک تغییر در کتابخانه reactivestreams.

رفع اشکال‌ها

نامزد انتشار - ۱۸ اکتبر ۲۰۱۷

همه آرتیفکت‌های اصلی (به‌جز Paging) اکنون 1.0.0-rc1 هستند.

مشکل شناخته‌شده یا ویژگی جدید دیگری برای نسخه 1.0.0 برنامه‌ریزی نکرده‌ایم. لطفاً پروژه‌هایتان را ارتقا دهید تا از 1.0.0-rc1 استفاده کنند و به ما کمک کنید تا آن را در شرایط واقعی آزمایش کنیم تا بتوانیم نسخه 1.0.0 را با پایداری کامل عرضه کنیم.

تغییر رفتار

  • با این نسخه پخش، اکنون وقتی onSaveInstanceState فراخوانی می‌شود، Lifecycle.Event#ON_STOP ارسال می‌شود (قبلاً فقط به‌عنوان CREATED علامت‌گذاری می‌شد بدون اینکه ON_STOP ارسال شود). می‌توانید در سند Lifecycles اطلاعات بیشتری درباره آن کسب کنید.

رفع اشکال‌ها

  • اتاق:

    • Room اکنون به جدیدترین آرتیفکت xerial وابسته است که مشکلات OutOfMemory را درطول کامپایل کردن برطرف می‌کند. b/62473121
    • اکنون می‌توان روش‌های Query را با @Transaction حاشیه‌نویسی کرد. برای جزئیات، اسناد مرجع در @Transaction را ببینید. b/65112315
    • کلاس StringUtil در Room از API عمومی برداشته شده است (هرگز قرار نبود به‌عنوان API عمومی استفاده شود).
  • چرخه‌های حیات:

    • LiveData properly works when Activity is partially covered on API < 24. b/65665621

    • OnLifecycleEvent روش‌ها در کلاس‌های والد اکنون به‌درستی فراخوانی می‌شوند یا درصورت عدم امکان، هشداری درطول کامپایل چاپ می‌شود. b/63474615

    • Lifecycle اکنون WeakReference را به LifecycleOwner برمی‌گرداند تا از نشت LifecycleOwner درصورتی‌که Lifecycle بیشتر از حد معمول در حافظه نگه داشته شود جلوگیری کند (این فقط یک اقدام احتیاطی است، همچنان باید مراقب باشید که Lifecycle نشت نکند).

۹ اکتبر ۲۰۱۷

Paging alpha-3 منتشر شده است؛ که آن را با نسخه beta 2 Lifecycles و Room سازگار می‌کند.

رفع اشکال‌ها

  • بهبود اسناد صفحه‌بندی.

۵ اکتبر ۲۰۱۷

همه آرتیفکت‌های اصلی (به‌جز Paging) اکنون beta 2 هستند. نسخه جدیدی از Paging در این نسخه پخش وجود ندارد.

رفع اشکال‌ها

  • چرخه‌های حیات:

    • LiveDataReactiveStreams now properly unsubscribes from the source publisher when LiveData is not active. b/62609183
    • رویدادهای چرخه حیات به‌درستی به کلاس‌های والد منتشر می‌شوند، وقتی کلاس والد از ماژول دیگری باشد. b/63474615
    • LiveData properly handles observers when they unsubscribe during subscrition creation. b/66337741
    • ‫FullLifecycleObserver برای مصنوع زبان Java 8 اکنون در درخت وابستگی دردسترس است. b/66525578

    • برای proguard، لطفاً خطوط زیر را به فایل proguard خود اضافه کنید. (وقتی نسخه ۱.۰.۰ عرضه شود، این کار لازم نخواهد بود)

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

    • اکنون Room وقتی Pojo برگردانده‌شده در روش @Query فیلد @NonNull داشته باشد که با هیچ‌کدام از ستون‌های پاسخ پرسمان مطابقت نداشته باشد، در زمان ترجمه خطا چاپ می‌کند. اگر فیلد @Nullable باشد، Room only فقط هشدار چاپ می‌کند. b/67115337
    • Room اکنون نمایه‌ها را در نسخه‌های جدیدتر سیستم‌عامل اعتبارسنجی می‌کند. b/63132683
    • اگر چند سازنده منطبق در Pojo وجود داشته باشد، Room به‌طور پیش‌فرض سازنده بدون آرگومان را انتخاب می‌کند. b/67353427
    • کلیدهای اصلی تک‌ستونی می‌توانند Nullable باشند اگر Integer یا Long باشند. b/67086876
    • ردیاب ابطال به‌درستی ورود مجدد در حالت آزمایشی را مدیریت می‌کند. b/65471397
    • Room اکنون در زمان ترجمه، نویسه‌های نامعتبر را در نام ستون‌ها و جدول‌ها بررسی می‌کند (نویسه‌های نامعتبر: `، "). b/64749111

۲۱ سپتامبر ۲۰۱۷

با این نسخهٔ پخش، همه ماژول‌های Architecture Components حداقل به beta 1 می‌رسند (به‌جز Paging Library جدید که alpha 2 است).

قصد نداریم تغییرات بیشتری در میانای برنامه‌سازی کاربردی ایجاد کنیم. ممکن است تغییرات برنامه‌ریزی‌نشده‌ای رخ دهد، اما احتمال تغییر هرگونه API قبل‌از نسخه پایدار 1.0.0 بسیار کم است و بعید است اتفاق بیفتد.

  • ‫LifecycleActivity و LifecycleFragment قبل‌از نسخه پایدار 1.0.0 برداشته خواهند شد. هنگام استفاده از «کتابخانه پشتیبانی» نسخه 26.1.0 یا جدیدتر، به آن‌ها نیازی نیست.

برخلاف مرحله آلفا، مرحله بتا برای مدت بسیار کوتاهی برنامه‌ریزی شده است.

تغییرات نسخه

  • «افزونه‌های چرخه حیات» و Room اکنون beta 1 هستند
  • اکنون پیجینگ alpha 2 است
  • هیچ تغییری در Lifecycles (زمان اجرا، مشترک) و Arch Core (مشترک) ایجاد نشده است. هر دو این مصنوعات از ۱۳ سپتامبر نسخه 1.0.0 هستند.

خروجی‌های ساختاریافته جدید

  • چرخه‌های حیات اکنون مصنوع جدیدی به‌نام common-java8 دارند. این آرتیفکت حاوی میانای جدیدی به‌نام DefaultLifecycleObserver است که پیاده‌سازی‌های پیش‌فرضی برای همه روش‌های Lifecycle دارد. اگر از زبان Java 8 استفاده می‌کنید، باید این آرتیفکت را به حاشیه‌نویسی‌ها ترجیح دهید.

    • به‌دلیل وجود اشکال در beta1، باید وابستگی صریحی به مدول android.arch.lifecycle:common:1.0.1 اضافه کنید تا بتوانید از مصنوع جدید common-java8 استفاده کنید. این مشکل در beta2 برطرف خواهد شد.

تغییرات بسته‌بندی

  • ‫android.arch.persistence.room.db به android.arch.persistence.db منتقل شد
  • android.arch.persistence.room.db-impl منتقل شد و نام آن به android.arch.persistence.db-framework تغییر کرد

هر دوی این آرتیفکت‌ها ازقبل وابستگی به Room دارند، بنابراین، مگر اینکه مستقیماً از آن‌ها استفاده می‌کردید، نباید نیازی به تغییر چیزی در فایل‌های ساخت خود داشته باشید.

تغییرات میانای برنامه‌سازی کاربردی

  • اتاق:

    • حاشیه‌نویسی @ColumnInfo اکنون از تنظیم مقابله در ستون پشتیبانی می‌کند. b/62007004
    • اکنون فیلدهای transient به‌طور پیش‌فرض نادیده گرفته می‌شوند، مگراینکه با @ColumnInfo، @Embedded، یا @Relation حاشیه‌نویسی شده باشند. b/62600692
    • Primary Keys must be annotated with @NonNull unless they are auto generated. b/64292391
      • این تغییر ممکن است به انتقال طرح‌واره نیاز داشته باشد. بابت مشکل پیش‌آمده متأسفیم.
    • حاشیه‌نویسی راحتی جدیدی (@Transaction) اضافه شد که روش DAO را لغو می‌کند و آن را در تراکنش اجرا می‌کند.
  • پشتیبانی از پایگاه داده SQLite:

  • صفحه‌بندی:

    • اسناد صفحه‌بندی با مثال‌های بیشتر و حاشیه‌نویسی‌های رشته‌ای بهبود یافته است.

رفع اشکال‌ها

  • اتاق:
    • رشته‌های چندخطی Kotlin در روش‌های @Query به‌درستی مدیریت می‌شوند. b/65809374
  • صفحه‌بندی:
    • آرتیفکت صفحه‌بندی دیگر به junit وابسته نیست. b/65690261

‫1.0.0 Alpha 9-1 -‏ ۱۳ سپتامبر ۲۰۱۷

این یک نسخه اصلی است که در آن مصنوعات چرخه حیات اصلی (زمان اجرا، مشترک) و هسته معماری (مشترک) به نسخه پایدار 1.0.0 می‌رسند.

همراه با این تغییر، «کتابخانه پشتیبانی» نسخه ۲۶.۱.۰ اکنون به این کتابخانه‌ها وابسته است. اکنون هر دو AppCompatActivity و Support Fragment میانای LifecycleOwner را پیاده‌سازی می‌کنند.

این نسخهٔ پخش همچنین به «کتابخانه پشتیبانی» 26.1.0 وابسته است تا از یکپارچه‌سازی جدید بهره ببرد.

کتابخانه جدید: صفحه‌بندی

این نسخه همچنین شامل کتابخانه جدیدی به‌نام Paging است که امکان بار کردن آسان مجموعه‌های داده بزرگ در RecyclerView را به‌صورت تکه‌تکه درصورت لزوم فراهم می‌کند. Paging به‌عنوان alpha1 منتشر شده است و چرخه انتشار خودش را خواهد داشت.

تغییرات میانای برنامه‌سازی کاربردی

رفع اشکال‌ها

  • اگر برنامه حاشیه‌نویسی را در مسیر کلاس داشته باشد، کلاس‌های تولیدشده اکنون با @Generated حاشیه‌نویسی می‌شوند. b/35754819

  • اشکال مقایسه ناظر MediatorLiveData برطرف شد. b/64413274

  • اکنون پُرسمان‌های SQLite WITH با [LiveData] پشتیبانی می‌شود. [ref-LiveData] b/62510164

  • اشکالی که در آن InvalidationTracker درصورت مشاهده بیش‌از ۱ جدول، فهرست درست را ارسال نمی‌کرد برطرف شد. b/65099281

  • اشکالی که باعث می‌شد Room فایل‌های متفاوتی در Windows تولید کند برطرف شد. b/64470691

  • اکنون LifecycleObservers در بسته ریشه پشتیبانی می‌شود. b/62310817

‫1.0.0 Alpha 9 -‏ ۱۶ اوت ۲۰۱۷

رفع اشکال‌ها

  • اشکالی در LiveData برطرف شد که در آن وقتی اولین Observer از روش onChanged خود برداشته می‌شد، دومین Observer نادیده گرفته می‌شد. b/64285805

‫1.0.0 Alpha 8 -‏ ۱ اوت ۲۰۱۷

تغییرات رفتار

  • محدودیت NOT NULL برای ستون‌های انواع اولیه یا ستون‌های حاشیه‌نویسی‌شده با NonNull اضافه شده است. این کار ساختار جدول‌های شما را تغییر می‌دهد، بنابراین اگر ازقبل از Architecture Components alpha 7 یا نسخه‌های قدیمی‌تر استفاده می‌کنید، اگر می‌خواهید داده‌ها را حفظ کنید باید انتقال را پیاده‌سازی کنید یا از روش fallbackToDestructiveMigration() در سازنده استفاده کنید. b/62007004

تغییرات میانای برنامه‌سازی کاربردی

‫1.0.0 Alpha 7 -‏ ۲۶ ژوئیه ۲۰۱۷

رفع اشکال‌ها

  • اشکال بحرانی در روش LifecycleRegistry removeObserver برطرف شد، که باعث خرابی افزودن مجدد LifecycleObserver می‌شد.

  • ‫InvalidationTracker برای پایگاه‌های داده سفارشی اصلاح شد b/63162311

‫1.0.0 Alpha 6 -‏ ۲۵ ژوئیه ۲۰۱۷

تغییرات رفتار

  • ترتیب فراخوانی‌های LifecycleObserver تغییر کرده است. قبلاً ناظران همیشه به‌ترتیب اضافه‌شدنشان فراخوانده می‌شدند: اگر observer1 قبل‌از observer2 اضافه شود، ON_CREATE و همه رویدادهای دیگر را قبل‌از observer2 دریافت خواهد کرد. این دیگر برای رویدادهای تخریب صادق نیست، برای آن‌ها ناظران به ترتیب معکوس اضافه شدن فراخوانی می‌شوند. بنابراین رفتار فعلی این است: اگر observer1 قبل‌از observer2 اضافه شود، ON_CREATE ابتدا به observer1 و سپس به observer2 ارسال می‌شود (همین اتفاق برای ON_START و ON_RESUME می‌افتد)، اما رویداد ON_PAUSE ابتدا به observer2 و سپس به observer1 ارسال می‌شود (همین اتفاق برای ON_STOP و ON_DESTROY می‌افتد).

  • اگر انتقال وجود نداشته باشد، Room استثنایی را ایجاد می‌کند. قبلاً Room فقط پایگاه داده را پاک می‌کرد، اما اکنون ازکار می‌افتد. توسعه‌دهندگان می‌توانند با فراخوانی میانای برنامه‌سازی کاربردی سازنده، با رفتار پاک‌سازی موافقت کنند. b/63872392

تغییرات میانای برنامه‌سازی کاربردی

  • Added fallbackToDestructiveMigration() method to RoomDatabase.Builder to clear the database if migration is missing. b/63872392

  • مؤلفه‌های معماری اکنون به کتابخانه پشتیبانی 26.0.0 وابسته هستند

رفع اشکال‌ها

  • Fixed handling @Relation nested into @Embedded. b/63736065

  • انتقال‌های آزمایشی برای جدول‌های دارای کلید اصلی افزایش خودکار اصلاح شد. b/63393618

  • اکنون @Queries که پُرسمان‌های DELETE یا UPDATE را اجرا می‌کند، متغیرهای مستقل را به‌درستی دریافت می‌کند. b/63872538

  • اکنون وقتی قطعه مالک در پشته برگشت باشد و تغییر پیکربندی دو بار اتفاق بیفتد، ViewModels حفظ می‌شود. b/38445801

‫1.0.0 Alpha 5 -‏ ۱۸ ژوئیه ۲۰۱۷

تغییرات میانای برنامه‌سازی کاربردی

برای افزودن پشتیبانی RxJava به Room، باید به آرتیفکت android.arch.persistence.room:rxjava2 وابسته باشید.

رفع اشکال‌ها

  • Fixed @Delete queries without any parameters. b/63608092

  • بررسی‌های نوع Room برای گیرنده‌ها و تنظیم‌کننده‌ها اصلاح شد. b/63733651

‫1.0.0 Alpha 4 -‏ ۱۱ ژوئیه ۲۰۱۷

تغییرات میانای برنامه‌سازی کاربردی

  • روش راحتی جدیدی (runInTransaction()) به RoomDatabase اضافه شد.

  • اکنون روش‌های @Insert، @Delete، و @Update می‌توانند پارامترهایی از انواع نهادهای مختلف داشته باشند. b/62682405

رفع اشکال‌ها

  • Fixed byte[] handling in @Dao methods. b/62460045

  • بررسی انتقال در Room اکنون از مقایسه غیرحساس به حروف بزرگ و کوچک استفاده می‌کند. b/62875382

  • پیکربندی proguard برای مصنوع Lifecycles اصلاح شد. b/62113696

‫1.0.0 Alpha 3 -‏ ۱۵ ژوئن ۲۰۱۷

تغییرات میانای برنامه‌سازی کاربردی

  • @OnLifecycleEvent اکنون فقط از ۱ پارامتر رویداد پشتیبانی می‌کند. این تغییر برای آماده‌سازی پشتیبانی از Java 8 است تا بتوانیم در آینده به میاناهای دارای روش‌های پیش‌فرض مهاجرت کنیم. دررابطه‌با این تغییر، فقط روش‌های حاشیه‌نویسی‌شده @OnLifecycleEvent(ON_ANY) می‌توانند پارامتر دوم از نوع Event را دریافت کنند (پارامتر اول LifecycleOwner است). برای جزئیات، به اسناد چرخه حیات مراجعه کنید.

  • کلاس‌های LifecycleActivity و LifecycleFragment به آرتیفکت android.arch.lifecycle:extensions منتقل شده‌اند.

  • MigrationTestHelper به‌جای Context، نمونه Instrumentation را دریافت می‌کند تا بتواند طرح‌واره را از دارایی‌های آزمایشی بخواند و پایگاه داده را در بافت برنامه ایجاد کند.

  • حاشیه‌نویسی‌های @Insert، @Delete و @Update در روش‌های @DAO اکنون می‌توانند Iterable را به‌عنوان نوع پارامتر داشته باشند. b/62259820

رفع اشکال‌ها

  • روش‌های لغوشده با رویدادهای چرخه حیات دیگر چندین بار فراخوانی نمی‌شوند.

  • اکنون چندین پارامتر IN به‌درستی مدیریت می‌شوند. b/62608681

  • کلاس‌های DAO انتزاعی اکنون می‌توانند سازنده‌ای داشته باشند که نمونه @Database را دریافت می‌کند. b/38488747

  • DAO's can now have a super class/interface with type parameters. b/62103620

‫1.0.0 Alpha 2 -‏ ۲ ژوئن ۲۰۱۷

تغییرات میانای برنامه‌سازی کاربردی

رفع اشکال‌ها

  • فایل‌های Proguard برای چرخه‌های حیات. (b/62113696)
  • ازدست رفتن داده‌ها با «تبدیل‌کننده‌های نوع». (b/62100716)
  • اجازه دادن به برگرداندن Long[] از پُرسمان‌های @Insert.

‫1.0.0 Alpha 1 -‏ ۱۷ مه ۲۰۱۷

MinSDK: 14

اطلاعیه‌های عمومی

  • اگرچه پیش‌از راه‌اندازی آزمایش‌های زیادی انجام دادیم، مؤلفه‌های معماری درحال‌حاضر در نسخه آلفا هستند. اگر درحال ساختن برنامه تولید هستید، توجه داشته باشید که API قبل‌از انتشار نسخه ۱.۰ تغییر خواهد کرد و ممکن است کاملاً پایدار نباشد. اگر با اشکال‌زدایی مشکلات در کتابخانه‌هایی که استفاده می‌کنید راحت نیستید، توصیه می‌کنیم ابتدا «مؤلفه‌های معماری» را در پروژه‌های جانبی امتحان کنید.

  • توصیه نمی‌کنیم که همه امروز مهاجرت کنند. ما یک راهنمای انتقال برای نسخه ۱.۰ مؤلفه‌های معماری آماده خواهیم کرد.

محدودیت‌ها و مشکلات شناخته‌شده