أرشيف ملاحظات إصدار مكونات البنية

15 كانون الثاني (يناير) 2019

مدير العمل

تم إصدار "1.0.0-beta02" من WorkManager. يحتوي هذا الإصدار على بعض إصلاحات الأخطاء.

إصلاح الأخطاء

  • تم إصلاح حالة حافة كان يمكن فيها تشغيل العمل الدوري أكثر من مرة لكل فاصل زمني على الأجهزة التي تعمل بنظام التشغيل Android 6.0 (مستوى واجهة برمجة التطبيقات 23). b/121998363
  • تم إصلاح ConcurrentModificationException على الأجهزة التي تعمل بنظام التشغيل Android 5.1 (المستوى 22 من واجهة برمجة التطبيقات) أو الإصدارات الأقدم. b/121345393
  • إصلاح التنفيذ الخاطئ للعمل عند عدم استيفاء القيود على الأجهزة التي تعمل بنظام التشغيل Android 5.1 (المستوى 22 من واجهة برمجة التطبيقات) أو أقل. b/122578012
  • تحسين التعامل مع إنجاز العمل ليكون أكثر سرعة في بعض الحالات المتقدمة. b/122358129
  • تمت إضافة تغيير لمعالجة ظروف السباق المحتملة بين مثيلات متعددة من LiveData يستخدمها WorkManager.
  • تم النقل لاستخدام تبعية Room 1.1.1 بدلاً من 1.1.1-rc01، هذه الإصدارات متطابقة. b/122578011

19 كانون الأول (ديسمبر) 2018

مدير العمل

تم إصدار "1.0.0-beta01" من WorkManager. لا يتضمّن هذا الإصدار أي تغييرات في واجهة برمجة التطبيقات. ومن الآن فصاعدًا، من المتوقّع أن يظل تطبيق WorkManager ثابتًا حتى الإصدار التالي ما لم تكن هناك مشكلة خطيرة. يحتوي هذا الإصدار على بعض إصلاحات الأخطاء.

إصلاح الأخطاء

  • ولن يتم تشغيل الوحدات الثانوية للعمل الرئيسي المكتمل بنجاح والتي تم إلغاؤها سابقًا. b/120811767
  • فئات التسجيل المهيأة بشكل صحيح (تظهر بشكل أساسي أثناء الاختبارات).

18 كانون الأول (ديسمبر) 2018

تم تحرير شريط التنقل 1.0.0-alpha09. يحتوي هذا الإصدار على تغييرات قد تؤدي إلى أعطال في واجهة برمجة التطبيقات. يُرجى الاطّلاع على قسم أعطال التغييرات أدناه.

لقد اخترنا عدم مواصلة تطوير عنصر android.arch.navigation:navigation-testing. أثبتت هذه العملية فعاليتها في الاختبار الداخلي لـ NavController، إلا أنّنا ننصح بشدة باستخدام استراتيجيات الاختبار البديلة، مثل السخرية من مثيل NavController، للتأكّد من أنّه يتم تنفيذ طلبات navigate() الصحيحة. تتم مناقشة هذا النهج بالتفصيل في حديث النشاط الواحد ضمن AndroidDevSummit 2018 وسنعمل على تقديم مستندات إضافية تحديدًا حول الاختبار باستخدام ميزة التنقّل.

الميزات الجديدة

  • لن تؤدي MenuItems التي تتضمن menuCategory="secondary" إلى عرض المكدس الخلفي عند استخدامها مع طرق NavigationUI. b/120104424
  • يتيح لك AppBarConfiguration الآن ضبط مثيل OnNavigateUpListener الاحتياطي الذي يتم طلبه عند عودة navController.navigateUp() false. b/79993862 b/120690961

تغييرات قد تؤدي إلى أعطال

  • عند استخدام <argument> مع argType="reference"، لن تعمل ميزة التنقّل على تحليل المرجع، بل توفّر معرّف المورد الأوّلي نفسه. 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

12 كانون الأول (ديسمبر) 2018

مدير العمل

تم إصدار "1.0.0-alpha13" من WorkManager. يتضمّن هذا الإصدار تغييرًا بسيطًا في واجهة برمجة التطبيقات سيكون مفيدًا لبعض مستخدمي لغة Kotlin.

تغييرات واجهة برمجة التطبيقات

  • تم نقل androidx.work.Result ليكون فئة داخلية في ListenableWorker. يمنع ذلك تعارضات إعادة الهيكلة مع فئة Result ذات المستوى الأعلى في Kotlin. هذا تغيير قد حدث في واجهة برمجة التطبيقات. b/120564418

كسر التغييرات في واجهة برمجة التطبيقات

  • تم نقل androidx.work.Result ليكون فئة داخلية في ListenableWorker.

6 كانون الأول (ديسمبر) 2018

ترقيم الصفحات

تم إصدار صفحة تسجيل الصفحات 2.1.0-rc01 بدون أي تغييرات من 2.1.0-beta01.

تم تحرير شريط التنقل 1.0.0-alpha08. يحتوي هذا الإصدار على تغييرات قد تؤدي إلى أعطال في واجهة برمجة التطبيقات. يُرجى الاطّلاع على قسم أعطال التغييرات أدناه.

الميزات الجديدة

  • عند استخدام تصنيفات الوجهة مع طرق NavigationUI، ستحل الآن تلقائيًا محل {argName} مثيلات في android:label بالوسيطة الصحيحة b/80267266
  • يعتمد التنقّل الآن على الإصدار 28.0.0 من Support Library b/120293333

تغييرات قد تؤدي إلى أعطال

  • تمت إعادة تسمية OnNavigatedListener إلى OnDestinationChangedListener b/118670572
  • يجتاز OnDestinationChangedListener الآن أيضًا Bundle من الوسيطات aosp/837142
  • تمت إزالة السمتَين app:clearTask وapp:launchDocument والطرق المرتبطة بهما. يمكنك استخدام app:popUpTo مع جذر الرسم البياني لإزالة جميع الوجهات من الحزمة الخلفية. b/119628354
  • يستخدم ActivityNavigator.Extras الآن نمط Builder مع إمكانية ضبط أي علامات Intent.FLAG_ACTIVITY_. aosp/828140
  • تمت إعادة تسمية NavController.onHandleDeepLink إلى handleDeepLink aosp/836063
  • تم final aosp/835681 العديد من الفئات والطرق غير المخصصة للفئات الفرعية، مثل NavOptions وNavInflater وNavDeepLinkBuilder وAppBarConfiguration .
  • تمت إزالة طريقة NavHostFragment.setGraph() المتوقّفة نهائيًا aosp/835684
  • لقد أزلنا طريقة NavigationUI.navigateUp(DrawerLayout, NavController) المتوقّفة نهائيًا. aosp/835684
  • تم نقل إنشاء الجزء إلى FragmentNavigator، لتسهيل تفويض إنشاء جزء إلى FragmentFactory. b/119054429
  • لم تعُد الدالة الإنشائية لـ NavGraphNavigator تستخدم Context aosp/835340
  • أصبح NavigatorProvider فئة الآن بدلاً من واجهة. لم يتم تغيير وظائف NavigatorProvider التي يعرضها getNavigatorProvider(). aosp/830660
  • تمّت إزالة NavDestination.navigate(). يمكنك الاتصال بـ navigate() على Navigator بدلاً من ذلك. aosp/830663
  • إعادة هيكلية كبيرة لـ Navigator، ما يؤدّي إلى إلغاء الحاجة إلى OnNavigatorNavigatedListener وبدلاً من ذلك جعل navigate يعيد NavDestination الذي تم الانتقال إليه.
  • لم يعُد بإمكان Navigator مثيل إرسال أحداث منبثقة إلى NavController. ننصحك باستخدام OnBackPressedCallback لاعتراض ضغطات زر الرجوع والاتصال بـ navController.popBackStack(). aosp/833716

إصلاح الأخطاء

  • تعمل popUpTo الآن بشكل متسق عندما تكون الوجهة عبارة عن عنصر <navigation> b/116831650
  • تم إصلاح عدد من الأخطاء التي أدت إلى حدوث الخطأ IllegalArgumentException عند استخدام الرسوم البيانية المدمجة b/118713731 b/113611083 b/113346925 b/113305559
  • ستعمل السمة dataPattern للوجهات <activity> الآن على تعبئة الوسيطات من الوسيطات التي ليست سلسلة من خلال استدعاء toString() b/120161365

الوسيطات الآمنة

  • تدعم Safe Args الكائنات القابلة للتسلسل، بما في ذلك قيم Enum. يمكن لأنواع التعدادات ضبط قيمة تلقائية باستخدام التعداد الحرفي بدون اسم الفئة (على سبيل المثال app:defaultValue="READ") b/111316353
  • تتيح ميزة Safe Args المصفوفات من جميع الأنواع المتوافقة. b/111487504
  • تتجاهل Safe Args الآن المجلدات الفرعية لأدلة الموارد. b/117893516
  • تضيف Safe Args تعليقات @Override التوضيحية حيثما كان ذلك مناسبًا b/117145301

5 كانون الأول (ديسمبر) 2018

مدير العمل

تم إصدار "1.0.0-alpha12" من WorkManager. يحتوي هذا الإصدار على بعض التغييرات العاجلة في واجهة برمجة التطبيقات. يُرجى مراجعة القسم Breaking API Changes (التغييرات في واجهة برمجة التطبيقات) أدناه. من المرجَّح أن يتم إطلاق هذا الإصدار كأول إصدار تجريبي. تتضمّن "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 الآن هي Result بدلاً من Payload. لا تتضمّن Worker طرق الاستلام والضبط للمخرجات Data. هذا تغيير قد يؤدي إلى عطل.
  • تمت إضافة Constraints.Builder.setTriggerContentMaxDelay(long, TimeUnit) وConstraints.Builder.setTriggerContentUpdateDelay(long, TimeUnit) والصيغ المختلفة لدعم معرّفات الموارد المنتظمة (URI) للمحتوى ذات التشغيل البطيء بشكل أفضل. b/119919774
  • تمت إضافة صيغة واحدة (WorkRequest.Builder.setBackoffCriteria(BackoffPolicy, Duration)). تتطلب هذه الطريقة واجهة برمجة التطبيقات 26.
  • تم إدراج طريقتَي الإضافة Operation.await() وListenableFuture.await() في Kotlin.
  • تمت إعادة تسمية Operation.getException() إلى Operation.getThrowable(). هذا تغيير قد يؤدي إلى عطل.
  • لم تعُد فئة ContentUriTriggers والطرق التي تشير إليها متاحة للاستخدام العام. هذا تغيير قد يؤدي إلى عطل.
  • تمت إزالة طُرق التباين الأخرى في WorkManager وWorkContinuation وOneTimeWorkRequest لتبسيط واجهة برمجة التطبيقات. لإصلاح أي مشاكل في الإصدار، يمكنك إحاطة التباينات الحالية بـ Arrays.asList(...). ما زلنا نضمّن إصدارات الوسيطة الفردية لكل طريقة. هذا تغيير قد يؤدي إلى عطل.
  • تمت إزالة WorkContinuation.combine(OneTimeWorkRequest, *) صيغة. كانت الشركة تقدّم واجهة برمجة تطبيقات مُربكة، لكنّ طُرق combine الحالية أكثر وضوحًا. هذا تغيير قد يؤدي إلى عطل.

إصلاح الأخطاء

  • أصبحت عمليات تنفيذ ما قبل نظام التشغيل Marshmallow أكثر موثوقية في التعافي بعد إيقاف مهام قيد التنفيذ بالفعل.
  • يتم تتبُّع LiveData الذي تتم ملاحظته من خلال observeForever من خلال WorkManager. هذا هو الجزء الخلفي لإصلاح مكتبة الغرفة. b/74477406
  • يقدّم Data.Builder.build() الآن استثناءً إذا كان العنصر المتسلسل يتجاوز الحد الأقصى للحجم. في السابق، لم يكن بإمكانك التعامل مع هذه السلسلة من سلاسل محادثات في الخلفية بشكل صحيح.
  • المزيد من العناصر التي تم إيقافها مقابل العمل الملغا، وسيعرض getWorkInfoById() الخطأ WorkInfo مع CANCELLED State خلال ListenableWorker.onStopped().
  • التعامل مع null Result كحالات تعذُّر في ListenableWorker. b/120362353
  • إصلاح نظري لأجهزة Shield اللوحية التي تعمل بالإصدار 24 من واجهة برمجة التطبيقات والتي تعرض أحيانًا خطأ IllegalArgumentException. b/119484416

كسر التغييرات في واجهة برمجة التطبيقات

  • تم إيقاف منصة Firebase JobDispatcher بسبب إيقافها قريبًا. هذا يعني أنّه لن يتم تعديل عنصر "work-firebase" بعد الآن مع انتقالنا إلى الإصدار التجريبي. نحن نسعى إلى إضافة بديل في المستقبل.
  • تم جمع Payload في Result. أصبحت Result الآن "فئة مغلقة" تتضمّن ثلاث عمليات تنفيذ ملموسة، يمكنك الحصول عليها من خلال Result.success() (أو Result.success(Data)) وResult.failure() (أو Result.failure(Data)) وResult.retry(). نتائج ListenableFuture الآن هي Result بدلاً من Payload. لا تتضمّن Worker طرق الاستلام والضبط للمخرجات Data.
  • تم إدراج طريقتَي الإضافة Operation.await() وListenableFuture.await() في Kotlin.
  • تمت إعادة تسمية Operation.getException() إلى Operation.getThrowable().
  • لم تعُد فئة ContentUriTriggers والطرق التي تشير إليها متاحة للاستخدام العام.
  • تمت إزالة طُرق التباين الأخرى في WorkManager وWorkContinuation وOneTimeWorkRequest لتبسيط واجهة برمجة التطبيقات. لإصلاح أي مشاكل في الإصدار، يمكنك إحاطة التباينات الحالية بـ Arrays.asList(...). ما زلنا نضمّن إصدارات الوسيطة الفردية لكل طريقة.
  • تمت إزالة WorkContinuation.combine(OneTimeWorkRequest, *) صيغة. كانت الشركة تقدّم واجهة برمجة تطبيقات مُربكة، لكنّ طُرق combine الحالية أكثر وضوحًا.

4 كانون الأول (ديسمبر) 2018

Room

تم إلغاء حجز الغرفة 2.1.0-alpha03 مع دعم الكوروتينات والعديد من إصلاحات الأخطاء.

تغييرات واجهة برمجة التطبيقات

  • أصبحت قيمة FTS tokenizer في @Fts3/@Fts4 الآن تتخذ سلسلة بدلاً من Enum. يسمح هذا الإجراء باستخدام برامج الرموز المميّزة المخصّصة بواسطة Room. لا تزال الرموز المميّزة المضمّنة محدّدة في FtsOptions كثوابت السلسلة. b/119234881

الميزات الجديدة

  • الإجراءات الروتينية: يمكن الآن أن تكون طرق DAO تعليق الدوال. لإتاحة تعليق الدوال في الغرفة، تم إصدار عنصر جديد، room-coroutines. b/69474692
  • طرق DAO التي تم التعليق عليها باستخدام @Insert أو @Delete أو @Update تتيح الآن استخدام ListenableFuture كنوع عرض. b/119418331

إصلاح الأخطاء

  • تم إصلاح خطأ كانت فيه محاولة Room عن طريق الخطأ للعثور على دالة إنشائية تحتوي على أعمدة في السمة ignoredColumns في @Entity. b/119830714
  • تم إصلاح خطأ كان لا يُدرج فيه Room علامة على معلَمات طريقة DAO كنهائية في عملية التنفيذ التي يتم إنشاؤها. b/118015483
  • تم إصلاح الخطأ المتمثل في تعطل معالج الغرفة عند الإبلاغ عن خطأ في طلب بحث يحتوي على رموز خاصة. b/119520136
  • تم إصلاح خطأ كان يرفض غرفة ترفض عمليات تنفيذ Collection المختلفة كوسيطات لتعبير IN. b/119884035
  • تم إصلاح الخطأ المتمثل في حصول بيانات LiveData التي يتم إرجاعها من Room على بيانات غير صالحة تم جمعها عندما تتم ملاحظتها على نحو دائم، ما أدى إلى توقفها عن إرسال بيانات جديدة. b/74477406
  • تم تحديث قفل RoomDatabase للتقليل من تزايد الطلب على دالة الاستبعاد المتبادل. b/117900450

8 تشرين الثاني (نوفمبر) 2018

مدير العمل

تم إصدار "1.0.0-alpha11" من WorkManager. يحتوي هذا الإصدار على العديد من التغييرات التي ستصبح واجهة برمجة تطبيقات ثابتة على beta. هناك تغييرات قد تؤدي إلى مشاكل في واجهة برمجة التطبيقات في هذا الإصدار. يُرجى الاطّلاع على القسم Breaking API Changes أدناه.

تغييرات واجهة برمجة التطبيقات

  • "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 جديدًا. هذا تغيير قد يؤدي إلى عطل.
  • لم تعُد جميع صيغ enqueue تقبل المتغيّرات لـ WorkRequest. هذا تغيير قد يؤدي إلى عطل. يمكنك استخدام "المجموعات" بدلاً من ذلك. ويمكنك استخدام Arrays.asList() لتعديل الرمز الحالي. وقد أجرينا ذلك لتقليل مساحة واجهة برمجة التطبيقات وعدد طرقها.
  • وستؤدي محاولة initialize WorkManager أكثر من مرة لكل عملية إلى IllegalStateException. هذا تغيير قد يؤدي إلى عطل.

إصلاح الأخطاء

  • تستخدم WorkRequest.Builder في العنصر work-runtime-ktx الآن ListenableWorker. إصلاحات b/117666259
  • تأكَّد من أنّ وقت تشغيل PeriodicWork في المستقبل. إصلاحات b/118204399
  • يمكنك إزالة عمليات إدخال/إخراج القرص المحتملة عند استخدام WorkManager عند بدء تشغيل التطبيق. إصلاحات 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 جديدًا.
  • لم تعُد جميع صيغ enqueue تقبل المتغيّرات لـ WorkRequest.
  • وستؤدي محاولة initialize WorkManager أكثر من مرة لكل عملية إلى IllegalStateException.

1 تشرين الثاني (نوفمبر) 2018

ترقيم الصفحات

تم إصدار صفحة تسجيل الصفحات 2.1.0-beta01 بدون أي تغييرات من 2.1.0-alpha01.

30 تشرين الأول (أكتوبر) 2018

Room

تم إصدار الغرفة 2.1.0-alpha02 مع إصلاح العديد من الأخطاء وإضافة ميزة جديدة.

الميزات الجديدة

  • تمت إضافة إمكانية الإشارة إلى @DatabaseView في @Relation. b/117680932

إصلاح الأخطاء

  • تم إصلاح الخطأ المتمثل في إجراء غرفة لإدخال/إخراج القرص في سلسلة التعليمات الرئيسية عند الاشتراك والتخلص من نوع إرجاع Rx. b/117201279
  • تم إصلاح خطأ تعذُّر العثور على محوِّل نوع مناسب لحقل في فئة كيان Kotlin. b/111404868
  • تم إصلاح خطأ يتمثّل في إنشاء غرفة رمز غير صحيح لتطبيق واجهة DAO تحتوي على طريقة تلقائية بلغة Kotlin لا تحتوي على أي وسيطات. b/117527454
  • تم تحديث المحلل اللغوي لقواعد SQLite في الغرفة، مع حل مشكلة في الأداء قد تؤدي إلى أوقات إصدار طويلة. b/117401230

29 تشرين الأول (أكتوبر) 2018

تم إصدار شريط التنقّل 1.0.0-alpha07 مع إصلاحات للأخطاء وتغييرات في واجهة برمجة التطبيقات.

الميزات الجديدة

  • تتيح لك فئة AppBarConfiguration الجديدة تخصيص الوجهات التي تُعتبر وجهات المستوى الأعلى. راجع المستندات المحدّثة للحصول على التفاصيل. b/117333663
  • يمكنك الآن تمرير الوسيطات إلى وجهة البداية للرسم البياني b/110300470
  • تتوافق الروابط لصفحات في التطبيق الآن مع المخططات المخصّصة التي تتضمّن نقاطًا وواصلات وعلامات جمع. b/112806402

تغييرات قد تؤدي إلى أعطال

  • تم طي وحدة navigation-testing-ktx في navigation-testing artifact ولن يتم نشرها بعد الآن.
  • تعتمد أداة navigation-testing الآن على مكتبة معايير لغة البرمجة Kotlin. تم تغيير واجهة برمجة التطبيقات لتصبح أكثر اتساقًا مع اصطلاحات Kotlin، ولكن يمكنك متابعة استخدامها للاختبارات المكتوبة بلغة Java.
  • لم تعُد الرسوم البيانية للتنقّل في بيان البيانات الوصفية متاحة. b/118355937
  • لم يعُد من الممكن إرفاق الإجراءات بوجهات <activity>. aosp/785539

إصلاح الأخطاء

  • تعمل روابط صفحات التطبيق الآن على تحليل مَعلمات طلب البحث بشكل صحيح. b/110057514
  • تطبّق وجهات الأنشطة الآن جميع رسوم الدخول والخروج بشكلٍ صحيح. b/117145284
  • العطل الذي تم إصلاحه يحدث بعد تغيير الإعداد عند استخدام برامج التنقل المخصصة. b/110763345

الوسيطات الآمنة

  • أصبحت المنصات الآمنة الآن تعتمد على المكوّن الإضافي Android Gradle الإضافي 3.2.1. b/113167627
  • يمكن الآن إنشاء التوجيهات للصفوف الداخلية. b/117407555
  • تم إصلاح مشكلة إنشاء الاتجاهات إلى رسم بياني من <include>. b/116542123

12 تشرين الأول (أكتوبر) 2018

ترقيم الصفحات

تم إصدار 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() كبديل لـ RxPagedListBuilder بلغة Kotlin.
  • تمت إضافة AsyncPagedListDiffer.addPagedListListener() للاستماع إليها عند تبديل PagedList. b/111698609
  • تمت إضافة صيغة واحدة (PagedListAdapter.onCurrentListChanged()) لاجتياز القائمة الجديدة، وتم إيقاف الصيغة السابقة نهائيًا.
  • تمت إضافة PagedListAdapter/AsyncPagedListDiffer.submitList() صيغًا تتطلب استدعاءًا إضافيًا يتم تشغيله في حال/عند عرض قائمة الصفحات، وذلك بعد الاختلاف. يُتيح لك هذا مزامنة تبديل PagedList مع تحديثات واجهة المستخدم الأخرى. b/73781068
  • تمت إضافة "PagedList.getLoadedCount()" لإعلامك بعدد العناصر الموجودة في الذاكرة. تجدر الإشارة إلى أنّ القيمة المعروضة تساوي دائمًا .size() في حال إيقاف العناصر النائبة.

إصلاح الأخطاء

  • إصلاح شرط العرق عند الاختلاف في حال إعادة استخدام القوائم b/111591017
  • تعرض دالة PagedList.loadAround() الآن الخطأ IndexOutOfBoundsException عندما يكون الفهرس غير صالح. وفي السابق، كان من الممكن أن يتعطل التطبيق مع استثناء آخر غير واضح.
  • تم إصلاح الحالة التي لا يؤدي فيها حجم التحميل المبدئي الصغير للغاية مع البيانات غير المتغيرة إلى مزيد من التحميل b/113122599

11 تشرين الأول (أكتوبر) 2018

مدير العمل

تم إصدار 1.0.0-alpha10 من WorkManager مع دعم للعمل غير المتزامن الذي يتحكّم فيه المطوّرون. هناك تغييرات قد تؤدي إلى مشاكل في واجهة برمجة التطبيقات في هذا الإصدار. يُرجى الاطّلاع على القسم Breaking API Changes أدناه.

نتوقع أن تدخل 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)). هذا تغيير قد يؤدي إلى أعطال في واجهة برمجة التطبيقات.

إصلاح الأخطاء

  • تم إصلاح المشكلة المعروفة من الإصدار alpha09 بشأن ملفات androidx-annotations.pro المكرّرة. يمكنك إزالة الحل البديل من ملاحظات الإصدار السابقة عن طريق حذف exclude 'META-INF/proguard/androidx-annotations.pro' من ملف Grale.
  • تمت إضافة إعدادات Proguard للحفاظ على الدالة الإنشائية الجديدة لـ Worker. b/116296569
  • إصلاح الخطأ NullPointerException المحتمل في حالة سباق كانت فيه قيمة العمل REPLACEd. b/116253486 وb/116677275
  • WorkContinuation.combine() تقبل الآن واحدة أو أكثر من WorkContinuation بدلاً من اثنين أو أكثر. b/117266752

كسر التغييرات في واجهة برمجة التطبيقات

  • تمت إزالة جميع الطرق والفئات deprecated السابقة، لا سيما الدالة الإنشائية التلقائية Worker.
  • تم دمج الواجهة WorkerFactory والتنفيذ الملموس DefaultWorkerFactory في فئة مجردة تسمى WorkerFactory.
  • تمت إزالة إذنَي WorkManager.synchronous() وWorkContinuation.synchronous().
  • تعرض WorkManager.getStatus*() طريقة الآن ListenableFutures. WorkManager.getStatus*LiveData() العودة إلى LiveDatas.

الميزات:

سيتم طرح 1.0.0-alpha02 للعقد الآجل.

تغييرات واجهة برمجة التطبيقات

  • يمكن للمطوّرين الآن استخدام الترميزَين ResolvableFuture وAbstractResolvableFuture كعمليات تنفيذ بسيطة وبسيطة لـ ListenableFuture.

8 تشرين الأول (أكتوبر) 2018

Room

تم إلغاء حجز الغرفة 2.1.0-alpha01.

الميزات الجديدة

  • FTS: تتيح الغرفة الآن الكيانات التي تحتوي على جدول FTS3 أو FTS4 للتعيين. يمكن الآن إضافة تعليقات توضيحية إلى الصفوف التي أُضيفت تعليقات توضيحية باستخدام @Entity باستخدام @Fts3 أو @Fts4 للإعلان عن صف يتضمّن جدول بحث يتضمّن النص الكامل للتعيين. تتوفّر خيارات FTS لمزيد من التخصيص من خلال طرق التعليق التوضيحي. b/62356416
  • طرق العرض: تتيح الغرفة الآن الإعلان عن فئة كطلب بحث مخزَّن، وهو ما يُعرف أيضًا باسم طريقة عرض باستخدام التعليق التوضيحي @DatabaseView. b/67033276
  • القيمة التلقائية: تتيح الغرفة الآن الإعلان عن الفئات التي تتضمّن تعليقات توضيحية ضمن القيمة التلقائية ككيانات وعناصر POJO. يمكن الآن الإعلان عن التعليقات التوضيحية للغرفة @PrimaryKey و@ColumnInfo و@Embedded و@Relation في الطرق المجرّدة للفئة التي تمت إضافة تعليقات توضيحية إليها. يجب أن تكون هذه التعليقات التوضيحية مصحوبةً بـ @CopyAnnotations لكي تفهمها الغرفة بشكل صحيح. b/62408420
  • دعم إضافي لأنواع إرجاع Rx: أصبحت طرق DAO التي تم التعليق عليها باستخدام @Insert أو @Delete أو @Update تتوافق الآن مع أنواع عرض Rx Completable وSingle<T> وMaybe<T>. b/63317956
  • الأنواع غير القابلة للتغيير في @Relation: كانت غرفة تطلب في السابق أن تكون حقول @Relation التي تتضمّن تعليقات توضيحية قابلة للضبط ولكن يمكن الآن أن تكون مَعلمات إنشائية.
  • enableMultiInstanceInvalidation: هي واجهة برمجة تطبيقات جديدة في RoomDatabase.Builder لتفعيل إمكانية إبطالها في حالات متعددة من RoomDatabase باستخدام ملف قاعدة البيانات نفسه. تعمل آلية إبطال المثيلات المتعددة هذه أيضًا في عمليات متعددة. b/62334005
  • fallbackToDestructiveMigrationOnDowngrade: هي واجهة برمجة تطبيقات جديدة في RoomDatabase.Builder لإعادة إنشاء قاعدة البيانات تلقائيًا في حال الرجوع إلى إصدار سابق. b/110416954
  • ignoredColumns: هي واجهة برمجة تطبيقات جديدة في التعليق التوضيحي @Entity يمكن استخدامها لإدراج الحقول التي تم تجاهلها حسب الاسم. يفيد هذا الإجراء لتجاهل الحقول الموروثة في أحد الكيانات. b/63522075

التغييرات في واجهات برمجة التطبيقات أو السلوك

  • أصبح mCallback وmDatabase في RoomDatabase الآن @Deprecated وستتم إزالتهما في الإصدار الرئيسي التالي من الغرفة. b/76109329

إصلاح الأخطاء

  • تم إصلاح مشكلتين حيث لا يتم استرداد Room بشكل صحيح من قاعدة بيانات تالفة أو عملية نقل بيانات غير صالحة أثناء التهيئة. b/111504749 وb/111519144
  • ستستخدم الغرفة الآن الدالة الإنشائية الأساسية للغة Kotlin بشكلٍ صحيح في فئات البيانات لتجنُّب الحاجة إلى تعريف الحقول بأنّها vars. b/105769985

1 تشرين الأول (أكتوبر) 2018

تم إلغاء حجز الغرفة 2.0.0 بدون أي تغييرات من 2.0.0-rc01. تم إصدار 2.0.0 ترقيم الصفحات مع إصلاح خطأ واحد.

ترقيم الصفحات

إصلاح الأخطاء

  • تم إصلاح العطل الذي قد يحدث عند التمرير السريع جدًا باستخدام PositionalDataSource والعناصر النائبة b/114635383.

21 أيلول (سبتمبر) 2018

تم إصدار دورة الحياة 2.0.0 مع إصلاح خطأ واحد من 2.0.0-rc01 في ViewModel.

مراحل النشاط

إصلاح الأخطاء

  • تم إصلاح قاعدة Proguard على ViewModel التي أدت إلى إزالة الدوال الإنشائية بشكل غير صحيح b/112230489

20 أيلول (سبتمبر) 2018

تم إصدار شريط التنقّل 1.0.0-alpha06 مع إصلاحات للأخطاء وتغييرات في واجهة برمجة التطبيقات.

الميزات الجديدة

تغييرات واجهة برمجة التطبيقات

  • تغيير مهم: تأخذ طريقة المستكشف navigate() الآن المعلَمة Navigator.Extras.
  • طريقة getGraph() في NavController أصبحت الآن NonNull b/112243286

إصلاح الأخطاء

  • لم يعد بإمكان NavigationUI.setupWithNavController() تسريب المشاهدات إذا تم استخدامها مع المشاهدات من وجهات فردية b/111961977
  • تم الآن تسمية المستكشف onSaveState() مرة واحدة فقط b/112627079

الوسيطات الآمنة

  • تعمل فئات الاتجاهات في وجهة التنقل الآن على تمديد فئة الاتجاهات التابعة لها الرئيسية إذا كانت موجودة b/79871405
  • تتضمّن فصول الاتجاهات وARgs الآن تطبيق toString() مفيدًا b/111843389

19 أيلول (سبتمبر) 2018

مدير العمل

تم إصدار 1.0.0-alpha09 من WorkManager مع إصلاحات للأخطاء وتحديثات للبنية الأساسية وتغييرات في واجهة برمجة التطبيقات.

مشكلة معروفة

إذا واجهتك المشكلة التالية: "تم العثور على أكثر من ملف واحد في المسار المستقل لنظام التشغيل 'meta-INF/proguard/androidx-annotations.pro'"، يُرجى وضع ما يلي في ملف Grale كحل بديل مؤقت أثناء حل المشكلة في الإصدار alpha10:

رائع

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

Kotlin

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

إصلاح الأخطاء

  • تمت إضافة إصلاح آخر كان مطلوبًا للخطأ "100 وظيفة". b/115560696
  • تمت إضافة بعض الإصلاحات لأخطاء قيود المفتاح الخارجي بسبب شروط السباق. b/114705286
  • تم تفويض ConstraintTrackingWorker.onStopped(boolean) من المكالمات الواردة إلى Worker الأساسية. b/114125093
  • فرض الحد الأدنى الصحيح لمهلة الاستجابة لـ Firebase JobDispatcher b/113304626
  • وتضمن سلاسل المحادثات المحسّنة عمليات داخلية للمكتبة.
  • يُرجى تصحيح مشكلة محتمَلة متعلقة بإزالة LiveData مكرّرًا داخليًا.

تغييرات واجهة برمجة التطبيقات

  • يمكنك الآن إنشاء مثيلات Worker خاصة بك في وقت التشغيل من خلال تحديد WorkerFactory كجزء من WorkManager.Configuration. المصنع الاحتياطي هو 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 نهائيًا. يُرجى الانتقال إلى الدالة الإنشائية الجديدة في أقرب وقت ممكن. ستزيل الإصدارات المستقبلية الدالة الإنشائية الافتراضية.

27 آب (أغسطس) 2018

مدير العمل

تم إصدار 1.0.0-alpha08 من WorkManager مع إصلاحات الأخطاء.

إصلاح الأخطاء

  • تتم الإشارة إلى مكوّنات WorkManager بوضوح على أنّها عند التشغيل المباشر غير مُدركة، ولذلك لا يتم تنشيطها أثناء التشغيل المباشر. سوف نوفِّر في المستقبل إصدارًا من WorkManager يوفّر إمكانية التشغيل المباشر. b/112665532
  • تم إصلاح المشكلة المتمثلة في عدم تشغيل العمل الذي تمت إعادة توجيهه. b/112604021
  • تم إصلاح العمل الدوري الذي لا يتم تنفيذه بشكل متكرر (يتعلق بالمشكلة أعلاه). b/112859683
  • سياسات التراجع الممنوحة عندما تكون عملية التطبيق قيد التشغيل
  • تم تصحيح رسائل الاستثناء في Data لتوضيح أنّ الحدّ الأقصى هو 10 كيلوبايت.
  • تم خفض القيمة القصوى من Configuration.setMaxSchedulerLimit(int) إلى 50 لمراعاة بعض وقت الاستجابة في اكتمال معالجة JobScheduler. b/112817355

16 أغسطس 2018

مدير العمل

تم إصدار 1.0.0-alpha07 WorkManager مع إصلاحات للأخطاء وتغييرات بسيطة في واجهة برمجة التطبيقات.

إصلاح الأخطاء

  • تم إصلاح استعلام SQL محتمل بحدود سلبية يمكن أن يعرض عددًا غير محدود من النتائج.
  • يؤدي الآن العمل الذي انتهى تنفيذه إلى إلغاء جميع النسخ المعلّقة من هذا العمل في أدوات الجدولة الأخرى بشكل صحيح. أدى ذلك إلى تجاوز الحدّ الأقصى المسموح به لعدد الوظائف، وهو JobScheduler. b/111569265
  • تم إصلاح ConcurrentModificationException في ConstraintTracker. b/112272753
  • تم تغيير التعليقات التوضيحية لنوع الإرجاع لـ Data.getBooleanArray(String) وData.getIntArray(String) إلى @Nullable بدلاً من @NonNull. b/112275229

تغييرات واجهة برمجة التطبيقات

  • تم الآن تمديد الصف "Worker" لفئة جديدة، وهي "NonBlockingWorker". ولا يؤثر ذلك في أي استخدام حالي. في المستقبل، ستصبح NonBlockingWorker كيانًا متوافقًا بالكامل مع حلول سلاسل المحادثات المخصّصة.
  • تم تغيير التعليقات التوضيحية لنوع الإرجاع لـ Data.getBooleanArray(String) وData.getIntArray(String) إلى @Nullable بدلاً من @NonNull. b/112275229
  • إضافات Kotlin: تم إيقاف Map.toWorkData() نهائيًا وتمّت إضافة workDataOf(vararg Pair<String, Any?>) من المستوى الأعلى بهدف تحقيق المزيد من الاتّساق مع واجهات برمجة التطبيقات الحالية.

10 آب (أغسطس) 2018

تم إصدار شريط التنقل 1.0.0-alpha05 مع إصلاحات الأخطاء.

إصلاح الأخطاء

  • إصلاح الخطأ الذي يتسبب في حدوث سلوك غير صحيح لحزمة Backstack. b/111907708
  • إصلاح خطأ في equals() بفئات Args التي تم إنشاؤها. b/111450897
  • يجب إصلاح إخفاق الإصدار في Safe Args. b/109409713
  • إصلاح إحالة ناجحة من معرّفات الموارد إلى أسماء JavaScript b/111602491
  • إصلاح رسائل الخطأ بشأن قابلية القيم الفارغة في المكوِّن الإضافي Safe Args
  • أضِف تعليقات توضيحية غير متوفّرة حول القيم الفارغة.

6 آب (أغسطس) 2018

إصدارات AndroidX من إصدار "مراحل النشاط" و"الغرفة" و"تتبُّع الصفحات" 2.0.0-rc01 لم يتم إجراء أي تغيير على جميع العناصر من 2.0.0-beta01.

1 آب (أغسطس) 2018

مدير العمل

تم إصدار 1.0.0-alpha06 من WorkManager مع إصلاحات الأخطاء.

إصلاح الأخطاء

  • منع قفل قاعدة البيانات عند جدولة العمل. b/111801342
  • إصلاح خطأ يؤدي إلى عدم تشغيل "PeriodicWork" في الموعد المحدَّد أثناء استخدام وضع "القيلولة". b/111469837
  • أصلح حالة السباق عند تتبُّع القيود التي تؤدي إلى تعطُّل WorkManager. googlecodelabs/android-workmanager/issues/56
  • إنشاء WorkRequest فريدة عند استخدام WorkRequest.Builder#build(). b/111408337
  • يمكنك تفعيل استخدام RescheduleReceiver فقط عند الحاجة إلى WorkRequest. b/111765853

24 تموز (يوليو) 2018

مدير العمل

تم إصدار 1.0.0-alpha05 من WorkManager مع إصلاحات للأخطاء المهمة وتغييرات التسجيل.

تغييرات واجهة برمجة التطبيقات

  • تمت الآن إضافة تعليقات توضيحية إلى 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.
  • تم إصلاح بعض شروط السباق والمشكلات المتعلقة بالتوقيت.
  • تم إخلاء BroadcastReceiver بشكل صحيح لم تعُد هناك حاجة إليها.
  • تحسين أداء إعادة جدولة عند إعادة تشغيل التطبيقات بعد فرض إغلاقها.
  • تم السماح بطلب TestScheduler.setAllConstraintsMet(UUID) قبل إضافة WorkRequest المحدّدة إلى قائمة الانتظار أو بعده. b/111238024

تغييرات قد تؤدي إلى أعطال

  • تمت الآن إضافة تعليقات توضيحية إلى WorkManager.getInstance() باستخدام @NonNull بدلاً من @Nullable.
  • تم تغيير توقيع Data.getString() بحيث لا يأخذ قيمة تلقائية بعد ذلك (إنه null ضمنيًا).
  • تم وضع علامة @hide على بعض الطرق اللازمة للاستخدام الداخلي فقط. ويشمل ذلك الدالة الإنشائية Constraints وData.toByteArray() وData.fromByteArray(byte[]).

July 19, 2018

يحتوي شريط التنقّل 1.0.0-alpha04 والمكوِّن الإضافي Safe Args الإضافي المرتبط على عدد من التغييرات في واجهة برمجة التطبيقات والتغييرات في السلوك وإصلاحات الأخطاء.

التغييرات في واجهات برمجة التطبيقات أو السلوك

  • سيضبط NavHostFragment دائمًا الجزء الحالي كجزء التنقل الأساسي، مع التأكد من فتح مدراء الأجزاء الفرعية قبل ظهور وحدة التحكّم الخارجية في NavHostFragment 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

12 تموز (يوليو) 2018

يحتوي شريط التنقّل 1.0.0-alpha03 والمكوِّن الإضافي Safe Args الإضافي المرتبط على عدد من التغييرات في واجهة برمجة التطبيقات والتغييرات في السلوك وإصلاحات الأخطاء.

التغييرات في واجهات برمجة التطبيقات أو السلوك

  • تمت إضافة طريقة NavigationUI.setupWithNavController لشريط الأدوات b/109868820
  • تمت إضافة طريقة NavigationUI.setupWithNavController لـ CollapsingToolbarLayout b/110887183
  • تعرض PopBackStack() الآن القيمة "false" عندما يكون المكدس الخلفي فارغًا أو عندما لا يكون رقم تعريف الوجهة المحدد في الحزمة الخلفية من b/110893637.
  • يتجاهل FragmentNavigator الآن عمليات التنقل بعد حفظ FragmentManager للحالة، مع تجنب "لا يمكن تنفيذ هذا الإجراء بعد استثناءات onSaveInstanceState" b/110987825

الوسيطات الآمنة

  • تغيير مهم: سيتم استبدال الأحرف غير الأبجدية الرقمية في اسم الإجراء وأسماء الوسيطات بحالة الجمل في أسماء طرق NavDirections ذات الصلة.
    • على سبيل المثال، سيصبح DemoController.index setDemoControllerIndex b/79995048.
    • على سبيل المثال، سيصبح action_show_settings actionShowSettings b/79642240.
  • تغيير قد يؤدي إلى عطل: تُعتبر الوسيطات الآن غير فارغة تلقائيًا. للسماح بالقيم الفارغة في السلسلة والوسيطات القابلة للفصل، أضِف app:nullable="true" b/79642307.
  • يمكنك الآن استخدام app:type="long" مع القيم التلقائية على شكل "123L" b/79563966.
  • أصبحت الوسيطات القابلة للدمج متاحة الآن، باستخدام اسم فئة مؤهل بالكامل لـ app:type. إنّ القيمة التلقائية الوحيدة المتوافقة هي "@null" b/79563966.
  • تنفِّذ صفوف Args الآن equals() وhashCode() b/79642246
  • يمكن الآن تطبيق المكوّن الإضافي Safe Args على مشاريع المكتبة b/80036553
  • يمكن الآن تطبيق المكوّن الإضافي Safe Args على مشاريع الميزات b/110011752

إصلاح الأخطاء

  • تم إصلاح المشكلات عند التنقل أثناء طرق دورة حياة التجزئة b/109916080
  • تم إصلاح المشاكل عند التنقل من خلال الرسوم البيانية المتداخلة عدة مرات b/110178671
  • تم حل المشاكل عند استخدام setPopUpTo مع الوجهة الأولى في الرسم البياني b/109909461
  • تم إصلاح المشكلة المتمثلة في تمرير جميع قيم app:defaultValue كسلاسل b/110710788
  • يضيف الآن aapt2 المضمن مع المكوّن الإضافي Android Gradle Plugin 3.2 الإصدار التجريبي 01 قواعد احتفاظ بالبيانات لكل سمة android:name في ملفات التنقل بتنسيق XML b/79874119.
  • تم إصلاح تسرب الذاكرة عند استبدال FragmentNavigator التلقائي b/110900142

2 تموز (يوليو) 2018

إصدارات AndroidX من إصدار "مراحل النشاط" و"الغرفة" و"تتبُّع الصفحات" 2.0.0-beta01

مراحل النشاط

إصلاح الأخطاء

  • إصلاح قاعدة مقدم خدمة LifecycleMonitorer للاحتفاظ بعمليات التنفيذ فقط، وليس الواجهات الفرعية b/71389427
  • إصلاح قواعد برودة ViewModel للسماح بإخفاء مفاتيح فك التشفير وتقليص

Room

التغييرات في واجهات برمجة التطبيقات أو السلوك

  • تمت إضافة RoomDatabase.Builder.setQueryExecutor() للسماح بتخصيص أماكن تنفيذ طلبات البحث.
  • تمت إضافة دعم RxJava2 Observable.
  • عمليات تنفيذ قاعدة البيانات وقواعد البيانات التي تم إنشاؤها أصبحت نهائية الآن

إصلاح الأخطاء

  • تحديد اسم الفئة/الحقل في الخطأ "لا يمكن العثور على قيمة للحقل" b/73334503
  • إصلاح توافق RoomOpenHelper مع الأنظمة القديمة مع الإصدارات القديمة من Room b/110197391

ترقيم الصفحات

إصلاح الأخطاء

  • اختفاء المحتوى الثابت في بعض حالات الإضافة (تم إيقاف العناصر النائبة، PositionalDataSource) b/80149146
  • (تم إصداره بالفعل في 1.0.1) الأعطال التي تم إصلاحها حيث يتعذّر على PagedListAdapter وAsyncPagedListDiffer الإشارة إلى أحداث النقل. b/110711937

26 حزيران (يونيو) 2018

ترقيم الصفحات

تم إصدار 1.0.1 ترقيم الصفحات مع إصلاح خطأ واحد في runtime. ننصح بشدة باستخدام السمة 1.0.1 لتحقيق الثبات. تم أيضًا إصدار 1.0.1 ترقيم الصفحات في RxJava2، وهو متطابق مع 1.0.0-rc1.

إصلاح الأخطاء

  • تم إصلاح الأعطال التي يتعذر فيها على PagedListAdapter وAsyncPagedListDiffer الإشارة إلى أحداث النقل. b/110711937

مدير العمل

تم إصدار "1.0.0-alpha04" من WorkManager.

إصلاح الأخطاء

  • تمت الآن إعادة جدولة PeriodicWorkRequest بشكلٍ صحيح عند استخدام عملية التنفيذ المستندة إلى AlarmManager.

  • إصلاح خطأ ANR محتمل عند إعادة جدولة جميع العاملين بعد فرض الإيقاف أو إعادة التشغيل. b/110507716

  • تمت إضافة التعليقات التوضيحية بشأن قابلية القيم الفارغة إلى العديد من واجهات برمجة تطبيقات WorkManager. b/110344065

  • سجّل الاستثناءات غير المرصودة التي تحدث أثناء تنفيذ العامل. b/109900862

  • تم السماح بعمليات نقل قاعدة البيانات المدمرة في حال قررت العودة إلى إصدار أقدم من WorkManager. b/74633270

  • تم إصلاح تعطُّل نقل البيانات في حال إنشاء علامات ضمنية مكرّرة. هذه مشكلة نادرة جدًا لا تحدث إلا إذا استخدمت تنسيق العلامة الضمنية نفسه بنفسك.

19 حزيران (يونيو) 2018

Room

تم إلغاء حجز الغرفة 1.1.1. هذا الإصدار مماثل للغرفة 1.1.1-rc1.

مدير العمل

تم إصدار "1.0.0-alpha03" من WorkManager.

إصلاح الأخطاء

  • تم إصلاح شرط سباق في التنفيذ المستند إلى AlarmManager. b/80346526.

  • تم إصلاح المهام المكرّرة عند استخدام "JobScheduler" بعد إعادة تشغيل الجهاز.

  • تظل الوظائف التي تتضمن عمليات تشغيل معرّف الموارد المنتظم (URI) للمحتوى قائمة الآن عبر عمليات إعادة التشغيل. b/80234744

  • التعديلات على المستندات: b/109827628 وb/109758949 وb/80230748

  • تم إصلاح عطل يحدث عند إعادة إضافة WorkRequest إلى قائمة الانتظار. b/109572353.

  • تم إصلاح تحذيرات برنامج تجميع Kotlin عند استخدام تبعية work-runtime-ktx.

  • يستخدم تطبيق WorkManager الآن الإصدار 1.1.1-rc1 من Room.

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة getStatusesSync()، وهو الإصدار المتزامن من WorkContinuation.getStatuses().

  • يستطيع "Worker" التمييز بين عملية الإلغاء التي يجريها المستخدم والإيقاف المؤقت الذي يطلبه نظام التشغيل. يعرض Worker.isStopped() قيمة true في حال طلب أي نوع من التوقف. Worker.isCancelled() يعرض true عندما يتم إلغاء العمل صراحةً. b/79632247

  • إضافة دعم لـ JobParameters#getNetwork() على واجهة برمجة التطبيقات 28. تم الكشف عن ذلك من خلال Worker.getNetwork().

  • تمت إضافة Configuration.Builder.setMaxSchedulerLimit(int maxSchedulerLimit) لتتمكّن من فرض عدد المهام التي يمكن إرسالها إلى JobScheduler أو AlarmManager. يساعد هذا الإجراء في منع WorkManager من أخذ جميع خانات JobScheduler المتاحة.

  • تمت إضافة Configuration.setJobSchedulerJobIdRange(int minJobSchedulerId, int maxJobSchedulerId) التي تساعد في تحديد مجموعة من أرقام تعريف الوظائف JobScheduler الآمنة لاستخدام WorkManager. b/79996760

  • تعرض Worker.getRunAttemptCount() عدد عمليات التشغيل الحالية لـ Worker محددة. b/79716516

  • يتيح لك WorkManager.enqueueUniquePeriodicWork(String uniqueWorkName, ExistingPeriodicWorkPolicy existingPeriodicWorkPolicy, PeriodicWorkRequest periodicWork) إضافة عناصر PeriodicWorkRequest فريدة إلى قائمة الانتظار. b/79600647

  • يلغي WorkManager.cancelAllWork() جميع Worker. يمكن للمكتبات التي تعتمد على WorkManager الاستعلام عن وقت آخر طلب بحث لهذه الطريقة وذلك باستخدام WorkManager.getLastCancelAllTimeMillis() لتنظيف إضافي للحالة الداخلية.

  • تمت إضافة WorkManager.pruneWork() لإزالة المهام المكتملة من قاعدة البيانات الداخلية. b/79950952، b/109710758

التغييرات في السلوك

  • تمت إضافة علامة ضمنية لكل WorkRequest، وهو اسم الفئة المؤهل بالكامل لفئة Worker. يتيح ذلك إمكانية إزالة WorkRequest بدون استخدام tag أو عندما لا تكون id متاحة. b/109572351

تغييرات قد تؤدي إلى أعطال

  • تمت إعادة تسمية Worker.WorkerResult إلى Worker.Result.

  • تتضمّن Worker.onStopped الآن معلَمة isCancelled إضافية تم ضبطها على true بعد إلغاء Worker بشكل صريح.

7 حزيران (يونيو) 2018

تم تحرير شريط التنقل 1.0.0-alpha02.

التغييرات في السلوك

  • يستخدم تطبيق FragmentNavigator الآن setReorderingAllowed(true). b/109826220

  • الانتقال الآن: URLفك ترميز الوسيطات المُحلّلة من عناوين URL لروابط صفحات التطبيق. b/79982454

إصلاح الأخطاء

  • تم إصلاح IllegalStateException عند استدعاء الانتقال من طرق مراحل نشاط التجزئة. b/79632233

  • يعتمد التنقل الآن على الإصدار 27.1.1 من Support Library لإصلاح الوميض عند استخدام الرسوم المتحركة. b/80160903

  • تم إصلاح IllegalArgumentException عند استخدام defaultNavHost="true" كجزء ثانوي. b/79656847

  • تم إصلاح StackOverflowError عند استخدام NavDeepLinkBuilder. b/109653065

  • تم إصلاح IllegalArgumentException عند الرجوع إلى رسم بياني متداخل. b/80453447

  • تم إصلاح مشكلة تداخل الأجزاء عند استخدام launchSingleTop. b/79407969

  • ينشئ التنقّل الآن المكدس الخلفي الاصطناعي الصحيح للرسومات البيانية المتداخلة. b/79734195

  • ستميّز واجهة MapsUI الآن العنصر الصحيح عند استخدام رسم بياني مدمج كدالة MenuItem. b/109675998

تغييرات واجهة برمجة التطبيقات

  • تم إيقاف السمة clearTask للإجراءات وواجهة برمجة التطبيقات المرتبطة بها في NavOptions. b/80338878

  • تم إيقاف السمة launchDocument للإجراءات وواجهة برمجة التطبيقات المرتبطة بها في NavOptions نهائيًا. b/109806636

24 أيار (مايو) 2018

تم إصدار "1.0.0-alpha02" من WorkManager.

مدير العمل

إصلاح الأخطاء

  • تم إصلاح NullPointerException في State.isFinished(). b/79550068

  • تم إصلاح مشكلة تسبّبت في إعادة جدولة Worker في Application.onCreate(). b/79660657

  • تم إصلاح المشكلة المتمثلة في إمكانية جدولة عمل أكثر مما يسمح به نظام التشغيل. b/79497378

  • تم نقل عملية تنظيف عمليات قفل التنشيط المرتبطة بـ Worker إلى سلسلة التعليمات في الخلفية.

  • أصبحت عملية تنفيذ AlarmManager الآن تتم إزالتها بشكل صحيح عند اكتمال جميع الأعمال المعلّقة.

  • تم إصلاح استعلامات SQL لتنظيف لغة الاستعلامات البنيوية (SQL) التي أثرت في اللغات غير الإنجليزية. b/80065360

  • تمت إضافة دعم float في Data. b/79443878

  • تعرض Data.Builder.putAll() الآن مثيلاً من Builder. b/79699162

  • المزيد من ملفات javadoc والإصلاحات في الوثائق. b/79691663

تغييرات واجهة برمجة التطبيقات

  • بإمكان "Worker" التفاعل مع إيقاف الجهاز. يمكن استخدام 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() كبديل.

16 أيار (مايو) 2018

تم إلغاء حجز رحلات RxJava2 1.0.0-rc1 والغرفة 1.1.1-rc1. وننصحك بشدة باستخدام الغرفة 1.1.1-rc1 بدلاً من 1.1.0 في حال كنت تستخدم عمليات نقل البيانات.

Room

تم إصلاح الخطأ المتمثل في عدم تعامل الغرفة مع تهيئة ما بعد نقل البيانات بشكل صحيح b/79362399

ترقيم الصفحات

سيتم نقل صفحة rxjava2 إلى إصدار الصفحة المرشحة بدون أي تغييرات من الإصدار الأولي.

8 أيار (مايو) 2018

الانتقال من صفحة إلى الإصدار 1.0 والإصدار الأولي من "التنقل" و"الإصدار الأولي من WorkManager" و"الغرفة 1.1" وAndroidX

تم إلغاء نقل الصفحات 1.0.0 والغرفة 1.1.0، بالإضافة إلى الإصدارات الأولية لمكوِّنين جديدين للبنية، وهما التنقل وWorkManager.

لم تطرأ أي تغييرات على الانتقالات والغرفة منذ آخر إصدارات المرشّحين للإصدار.

المكتبة الجديدة: التنقل

توفر التنقل إطار عمل لإنشاء التنقل داخل التطبيق. هذا الإصدار الأولي هو 1.0.0-alpha01.

المكتبة الجديدة: WorkManager

يعمل WorkManager على تبسيط عملية الجدولة وتنفيذ العمل المضمون والمراعي لقيود في الخلفية. هذا الإصدار الأولي هو 1.0.0-alpha01.

AndroidX

سيتم نقل المكوّنات الهندسية لتصبح جزءًا من AndroidX، بما في ذلك أسماء الحِزم المعدّلة وأسماء العناصر والتبعيات على مكتبات AndroidX الأخرى. ويتم إصدارها ضمن الإصدار 2.0.0-alpha1 لاستخدامها مع مكتبات AndroidX الأخرى.

إضافات Kotlin

تتضمّن كل من ViewModel وReactiveStreams وSqlite (المعروف سابقًا باسم "قاعدة البيانات" في الغرفة) مكتبات إضافات لغة البرمجة Kotlin كجزء من إصدار الإصدار الأولي من AndroidX. بالإضافة إلى ذلك، تتضمن التنقل وWorkManager وحدات -ktx. ويمكن العثور على كل وحدة من وحدات الإضافات هذه في إضافة المكونات.

2 أيار (مايو) 2018

  • المرشح لإلغاء حجز الغرفة 1.1.0
  • تم إلغاء حجز الغرفة 1.1.0-rc1.

إصلاح الأخطاء

  • الغرفة متوافقة الآن مع 1.2.40 في Kotlin. b/78328708

19 نيسان (أبريل) 2018

المرشّح لإصدار مستند ترتيب الصفحات

تم إلغاء حجز صفحة 1.0.0-rc1 والغرفة 1.1.0-beta3.

ترقيم الصفحات

ليس لدينا أي مشاكل معروفة أخرى أو ميزات جديدة مُجدوَلة في إصدار 1.0.0 من صفحات الصفحات. يُرجى ترقية مشاريعك لاستخدام 1.0.0-rc1 ومساعدتنا في اختباره حتى يتسنى لنا شحن 1.0.0 صلب.

لم يتم إجراء أي تغييرات على هذا الإصدار، لأنّه مماثل للإصدار 1.0.0-beta1.

Room

إصلاح الأخطاء

  • إصلاح خطأ التحويل البرمجي عندما يشير طلب POJO في Kotlin إلى كيان علاقي تم تحديده في Java b/78199923

5 نيسان (أبريل) 2018

تم إلغاء حجز الغرفة 1.1.0-beta2 والتنقل في الصفحات 1.0.0-beta1 و1.0.0-alpha1 رقم تسجيل الصفحات لـ RxJava.

ستكون ميزة الانتقال من صفحة إلى أخرى في إصدار تجريبي لفترة قصيرة قبل التقدّم لإصدار المرشح. ولا نخطط لإجراء المزيد من التغييرات في واجهة برمجة التطبيقات في الإصدار Paging 1.0، والشريط الخاص بأي تغييرات في واجهة برمجة التطبيقات مرتفع جدًا.

تم إطلاق دعم Alpha RxJava2 لميزة "نقل الصفحات" كوحدة اختيارية منفصلة (android.arch.paging:rxjava2:1.0.0-alpha1) وسيتم تعديلها مؤقتًا في إصدار منفصل إلى أن تستقرّ.

توفّر هذه المكتبة الجديدة بديل RxJava2 لـ LivePagedListBuilder، قادرة على إنشاء Observable وFlowable، وتأخذ Scheduler بدلاً من Executors:

Kotlin

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

Java

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

ترقيم الصفحات

الميزات الجديدة

  • تمت إضافة RxPagedListBuilder من خلال عنصر android.arch.paging:rxjava2 الجديد.

تغييرات واجهة برمجة التطبيقات

  • تغييرات في واجهة برمجة التطبيقات لتوضيح دور جهات التنفيذ في منصات الإنشاء:

    • تمت إعادة التسمية setBackgroundThreadExecutor() إلى setFetchExecutor() (في PagedList.Builder وLivePagedListBuilder)

    • تمت إعادة التسمية setMainThreadExecutor() إلى setNotifyExecutor() (في PagedList.Builder).

  • تم إصلاح عضو واحد (PagedList.mCallbacks) لكي يصبح خاصًا.

إصلاح الأخطاء

  • يشغّل LivePagedListBuilder تحميل PagedList الأولي على المنفّذ المحدد، بدلاً من مجموعة سلاسل محادثات IO للمكوّنات الرئيسية.

  • إصلاح سلوك عدم الصحّة في برامج تضمين DataSource الداخلية (يُستخدَم لتنفيذ DataSource.map، بالإضافة إلى تحميل PositionalDataSource المتوقّف عن العنصر النائب) b/77237534

Room

إصلاح الأخطاء

  • تم إصلاح خطأ فادح في عمليات تنفيذ Rx Single وMaybe في الغرفة حيث قد يؤدي إلى إعادة تدوير طلب البحث مسبقًا، مما يتسبب في حدوث مشاكل إذا أضفت أكثر من مراقب واحد إلى الأخطاء Single أو Maybe المعروضة. b/76031240

  • لن تعمل الدالة RoomDatabase.clearAllTables على VACUUM قاعدة البيانات إذا تم استدعائها داخل معاملة. b/77235565

21 آذار (مارس) 2018

تم إلغاء حجز الغرفة 1.1.0-beta1 وخطوات الانتقال إلى 1.0.0-alpha7 ودورات الحياة 1.1.1.

Room

تغييرات واجهة برمجة التطبيقات

  • استنادًا إلى الملاحظات والآراء بشأن مراجعة واجهة برمجة التطبيقات، لم يعُد @RawQuery يقبل تمرير String باعتباره مَعلمة طلب البحث. تحتاج إلى استخدام SupportSQLiteQuery. (يُرجى الاطّلاع على SimpleSQLiteQuery لإنشاء مثيل SupportSQLiteQuery بسهولة باستخدام الوسيطة).
  • تقبل الطريقة fallbackToDestructive MigrationFrom في RoomDatabase.Builder اسم vararg int بدلاً من vararg Integer.

إصلاح الأخطاء

  • يحاول RoomDatabase.clearAllTables الآن إعادة مسافة إلى نظام التشغيل من خلال ضبط نقطة تفتيش WAL وVACUUMنقل قاعدة البيانات.

  • تقبل @RawQuery الآن أي Pojo للسمة observedEntities ما دامت Pojo تشير إلى كيان واحد أو أكثر من خلال حقول Embedded أو Relations. b/74041772

  • الانتقال من صفحة إلى أخرى: أصبح تنفيذ DataSource في الغرفة يعالج بشكل صحيح التبعيات متعددة الجداول (مثل العلاقات وضمات). في السابق، كانت لا تنجح في ظهور نتائج جديدة، أو قد تفشل في تجميعها. b/74128314

دورات الحياة

تغيير صغير واحد فقط: تم نقل android.arch.core.util.Function من arch:runtime إلى arch:common. يسمح هذا الإجراء باستخدامها بدون الاعتمادية على وقت التشغيل، مثلاً في paging:common أدناه.

إنّ lifecycle:common هي تابعة لـ lifecycle:runtime، لذلك لن يؤثر هذا التغيير في lifecycle:runtime مباشرةً، بل يؤثر فقط في الوحدات التي تعتمد مباشرةً على lifecycle:common، كما هو الحال في عملية التقسيم إلى صفحات.

ترقيم الصفحات

تم إطلاق ميزة الانتقال من 1.0.0-alpha7 إلى جانب دورات الحياة 1.1.1. بما أنّ عملية نقل بيانات الإصدار alpha7 تعتمد على نقل الفئة Function المذكورة أعلاه، ستحتاج إلى تعديل تبعية lifecycle:runtime إلى android.arch.lifecycle:runtime:1.1.1.

من المقرر أن يكون نظام ترقيم البيانات alpha7 هو الإصدار النهائي قبل الإصدار التجريبي من ميزة الانتقال إلى صفحات.

تغييرات واجهة برمجة التطبيقات

  • يحتوي DataSource.LoadParams من العناصر الآن على دالة إنشاء عامة وDataSource.LoadCallback من العناصر أصبحت الآن مجردة. يتيح ذلك إمكانية لفّ DataSource أو اختبار DataSource مباشرةً مع معاودة الاتصال كنموذج. b/72600421
  • مصممو الخرائط لـ DataSource وDataSource.factor
    • تسمح لك map(Function<IN,OUT>) بتحويل النتائج التي تم تحميلها باستخدام DataSource أو لفّها أو تزيينها.
    • تتيح mapByPage(<List<IN>,List<OUT>>) الطريقة نفسها للمعالجة المجمّعة (على سبيل المثال، إذا كانت العناصر التي تم تحميلها من SQL تحتاج إلى إجراء المزيد من طلبات البحث عن قاعدة بيانات منفصلة، يمكن تنفيذ ذلك كدفعة).
  • تمت إضافة PagedList#getDataSource() كطريقة مريحة b/72611341
  • تمت إزالة جميع الفئات المتوقّفة نهائيًا من واجهة برمجة التطبيقات، بما في ذلك ما تبقى من حزمة recyclerview.extensions وLivePagedListProvider.
  • تم تغيير DataSource.Factory من واجهة إلى فئة مجردة لتفعيل وظيفة الخريطة.

إصلاح الأخطاء

  • سيتم تغيير البنّاءات لتصبح نهائية. b/70848565
  • تم إصلاح عملية تنفيذ الغرفة DataSource الآن للتعامل مع طلبات البحث متعددة الجداول. ويتوفّر هذا الحلّ في الغرفة 1.1.0-الإصدار التجريبي 1، كما هو موضَّح أعلاه.
  • تم إصلاح خطأ لا يتم فيه استدعاء BoundaryCallback.onItemAtEndLoaded للسمة PositionalDataSource إذا تم تفعيل العناصر النائبة وكان الحجم الإجمالي مضاعفًا دقيقًا لحجم الصفحة.

2 آذار (مارس) 2018

تم إلغاء حجز الغرفة 1.1.0-alpha3. هذا هو آخر إصدار أولي مخطط له للغرفة 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

27 شباط (فبراير) 2018

تم إطلاق ميزة الانتقال إلى صفحات 1.0.0-alpha6 إلى جانب الإصدار 27.1.0 من Support Library. تم نقل ListAdapter وبعض الصفوف ذات الصلة من "مكتبة تسجيل الصفحات" مباشرةً إلى Recyclerview، بالإضافة إلى بعض عمليات إعادة التسمية لتسهيل وظيفة بعض الصفوف. من المرجّح أن يكون هذا الإصدار الأولي من التقسيم على صفحات هو الأخير الذي يتضمّن تغييرات كبيرة قد تؤدي إلى أعطال في واجهة برمجة التطبيقات.

تغييرات واجهة برمجة التطبيقات

  • الصفوف التي تم نقلها إلى recyclerview-v7:
    • ListAdapter
  • تمت إعادة تسمية الصفوف ونقلها إلى recyclerview-v7:
    • ListAdapterHelper -> AsyncListDiffer
    • ListAdapterConfig -> AsyncDifferConfig
    • DiffCallback -> DiffUtil.ItemCallback
  • الصفوف التي تمت إعادة تسميتها في وقت تشغيل الصفحات:
    • PagedListAdapterHelper -> AsyncPagedListDiffer

كانت الصفوف التي تم نقلها مفيدة إلى جانب RecyclerView، بشكل مستقل عن مكتبة تسجيل الصفحات. ويعني هذا أنّه يمكن استخدامها بدون الاعتماد على الإصدار الأولي لميزة "تتبُّع الصفحات"، ولكن يجب أيضًا ترقية التطبيقات التي تستخدم ميزة "تسجيل الدخول إلى صفحات" إلى الإصدار ألفا 6 والإصدار 27.1.0 من "مكتبة الدعم" في الوقت نفسه.

** دليل نقل البيانات للإصدار Alpha6 من الانتقال إلى صفحة: **

  • تعديل التبعيات المتعلّقة بالتقسيم إلى صفحات وإعادة التدوير إلى 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()
    • تمت إعادة تسميتها لتوضيح الطبيعة غير المتزامنة لاختلاف القائمة

إصلاح الأخطاء

  • إصلاح تمرير الموضع المبدئي غير الصحيح للتحميل الأولي عند إيقاف العناصر النائبة. b/73513780

15 شباط (فبراير) 2018

تم إلغاء حجز الغرفة 1.1.0-alpha2.

الميزات الجديدة

  • تتيح الغرفة الآن فتح قاعدة البيانات في وضع تسجيل الكتابة المسبقة. في هذا الوضع، لن تحظر كتاباتك بعد الآن طلبات البحث للقراءة. على الرغم من أنّه يستهلك قدرًا أكبر من الذاكرة (بسبب تعدد الاتصالات)، عادةً ما يكون هذا الوضع أسرع. وفقًا للإعدادات التلقائية، سيستخدم تطبيق Room WAL إذا كان الجهاز يعمل بنظام التشغيل API 16 أو إصدار أحدث، وليس جهازًا بسعة ذاكرة منخفضة. ويمكنك التحكّم في هذا السلوك باستخدام طريقة 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).

  • تتيح الغرفة الآن عرض java.util.Optional<T> من DAO طلب بحث.

  • أصبحت طرق الواجهة مع عمليات التنفيذ التلقائية متاحة الآن في طرق @Transaction ضمن DAO فئة. ويمكن استخدام هذه الميزة مع Java 8 وKotlin. b/72416735

إصلاح الأخطاء

  • لن تتسبب المنشئات التي تتضمّن @Relation في حدوث خطأ في التجميع إذا كانت هناك دالة إنشاء أخرى يمكن استخدامها. b/72884434

  • يتم الآن تخطي أسماء الجداول التي تم تجاوزها باستخدام ' في طرق @Query بشكل صحيح لأداة تتبع الإبطال. b/72366965

  • تستخدم Room الآن تعليقات @Metadata التوضيحية بلغة Kotlin لقراءة بنية الصف أثناء معالجة التعليقات التوضيحية. وهذا يعني أنه حتى في حالة توريث بوجو من التبعية، يمكن قراءة أسماء معلمات الدالة الإنشائية بشكلٍ صحيح. b/67181813

  • تم إصلاح مشكلة العثور على مسارات الانتقال إلى إصدار سابق. b/72153525

  • يتم الآن التعامل مع أنواع الأعمدة غير التلقائية بشكل صحيح عند نقل البيانات من قاعدة بيانات حالية إلى الغرفة. b/71953987

  • تعالج Room الآن بشكل صحيح حقول boolean? المستمرة في فئات Kotlin. b/72786402

22 كانون الثاني (يناير) 2018

تم إلغاء دورات الحياة 1.1.0، والغرفة 1.1.0-alpha1، و1.0.0-alpha5 صفحة الأسعار.

دورة الحياة 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.

الغرفة 1.1.0-alpha1

الميزات الجديدة

  • RawQuery: تسمح واجهة برمجة التطبيقات الجديدة هذه لطرق @Dao بتلقّي لغة الاستعلامات البنيوية (SQL) كمَعلمة طلب بحث b/62103290، b/71458963
  • fallBackToDestructiveMigrationsFrom: تتيح واجهة برمجة التطبيقات الجديدة هذه في RoomDatabase.Builder إمكانية تحكُّم أكثر دقة في عمليات بدء عمليات نقل البيانات التخريبية لإصدارات المخطط (مقارنةً بـ fallbackToDestructive Migration) b/64989640
  • لا تتوافق غرفة الآن إلا مع واجهات برمجة التطبيقات الأحدث (الإصدار alpha-4 والإصدارات الأحدث) التي لن تتيح استخدام الإصدار LivePagedListProvider المتوقّف نهائيًا. لاستخدام الإصدار الأولي الجديد من الغرفة، عليك استخدام التقسيم على صفحات alpha-4 أو الإصدارات الأحدث، والتبديل من LivePagedListProvider إلى LivePagedListBuilder إذا لم يسبق لك ذلك.

إصلاح الأخطاء

  • توافق محسَّن مع أنواع Kotlin Kapt. b/69164099
  • لا يؤدي ترتيب الحقول إلى إلغاء صلاحية المخطط بعد الآن. b/64290754

الانتقال من إصدار 1.0.0-alpha5

إصلاح الأخطاء

  • إصلاح تحميل الصفحة عند إيقاف العناصر النائبة b/70573345
  • تسجيل إضافي لتتبُّع الخطأ b/70360195 (وإصلاح مشكلة من جانب الغرفة)
  • نموذج رمز JavaScript لإصلاح b/70411933 وb/71467637

11 كانون الأول (ديسمبر) 2017

تم إلغاء حجز صفحة alpha4-1 في صفحة النتائج. هذا إصدار صغير لإصلاح الأخطاء للإصدار ألفا 4 من الصفحة.

إصلاح الأخطاء

  • لا تتحقق من معلَمات رد الاتصال بحثًا عن مصادر بيانات غير صالحة. b/70353706، b/70360195

7 كانون الأول (ديسمبر) 2017

تم إطلاق 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() للاطّلاع على التعديلات التي يتم عرضها على PagedList.

إصلاح الأخطاء

  • تم إصلاح IndexOutOfBoundsException في PagedListAdapter(المساعد) b/67883658

من 1.0.0 إلى 6 تشرين الثاني (نوفمبر) 2017

جميع المكوّنات الرئيسية (باستثناء عملية نقل البيانات) أصبحت الآن 1.0.0. هذا الإصدار هو نفسه الإصدار rc1، باستثناء تغيير واحد تم إجراؤه على مكتبة reactivestreams.

إصلاح الأخطاء

مرشح للإصدار - 18 تشرين الأول (أكتوبر) 2017

تم تغيير إعدادات جميع العناصر الرئيسية (باستثناء عملية نقل البيانات) إلى 1.0.0-rc1 الآن.

ليس لدينا أي مشاكل معروفة أخرى أو ميزات جديدة مجدولة في إصدار 1.0.0. يُرجى ترقية مشاريعك لاستخدام 1.0.0-rc1 ومساعدتنا في اختباره حتى نتمكن من شحن صخرة 1.0.0.

تغيير السلوك

  • مع هذا الإصدار، تم إرسال Lifecycle.Event#ON_STOP الآن عند تسمية onSaveInstanceState (في السابق، تم وضع علامة CREATED عليها فقط بدون إرسال ON_STOP). يمكنك الاطّلاع على مزيد من المعلومات حول هذا في مستندات دورات الحياة.

إصلاح الأخطاء

  • الغرفة:

    • تعتمد الغرفة الآن على أحدث أداة بصرية تعمل على حلّ مشاكل OutOfMemory أثناء التجميع. b/62473121
    • يمكن الآن إضافة تعليقات توضيحية من طُرق Query باستخدام @Transaction. يمكنك الاطّلاع على المستندات المرجعية على @Transaction للحصول على التفاصيل. b/65112315
    • تمت إزالة فئة StringUtil في الغرفة من واجهة برمجة التطبيقات العامة (لم يتم استخدامها مطلقًا كواجهة برمجة تطبيقات عامة).
  • دورات الحياة:

    • يعمل LiveData بشكل صحيح في حال تناول النشاط جزئيًا في واجهة برمجة التطبيقات < 24. b/65665621

    • يتم الآن استدعاء طُرق OnLifecycleEvent في الفئات الرئيسية بشكل صحيح أو تتم طباعة تحذير أثناء التحويل البرمجي إذا لم يكن ذلك ممكنًا. b/63474615

    • تحتفظ lifecycle الآن بـ WeakReference إلى LifecycleOwner لتجنب تسريب LifecycleOwner إذا تم الاحتفاظ بدورة الحياة في الذاكرة لفترة أطول من المعتاد (هذا مجرد تدبير احترازي، يجب أن تحرص على عدم تسرب Lifecycle).

9 تشرين الأول (أكتوبر) 2017

تم إلغاء إمكانية حجز الصفحات alpha-3، ما يجعلها متوافقة مع إصدار beta 2 لدورات الحياة والغرفة.

إصلاح الأخطاء

  • مستندات محسَّنة بشأن الانتقال إلى صفحات

5 تشرين الأول (أكتوبر) 2017

تم تغيير إعدادات جميع العناصر الرئيسية (باستثناء عملية نقل البيانات) إلى beta 2 الآن. لا يتوفّر إصدار جديد من ميزة "التبديل إلى الصفحات" في هذا الإصدار.

إصلاح الأخطاء

  • دورات الحياة:

    • LiveDataReactiveStreams الآن يلغي اشتراك الناشر المصدر بشكل صحيح عندما يكون LiveData غير نشط. b/62609183
    • يتم نشر أحداث مراحل النشاط بشكل صحيح في الصفوف الرئيسية عندما تكون الفئة الرئيسية من وحدة أخرى. b/63474615
    • تعالج LiveData المراقبين بطريقة ملائمة عند إلغاء اشتراكهم خلال عملية إنشاء طلب الاشتراك. b/66337741
    • تتوفر الآن FullLifecycleObserver لأداة لغة Java 8 في شجرة التبعية. b/66525578

    • للحصول على Proguard، يُرجى إضافة السطور التالية إلى ملف proguard. (لن يكون هذا ضروريًا عند شحن 1.0.0)

      • -keep class * implements android.arch.lifecycle.GeneratedAdapter {<init>(...);}
  • الغرفة:

    • تطبع Room الآن رسالة خطأ في وقت التجميع عندما تحتوي طريقة Pojo التي تم عرضها في طريقة @Query على الحقل @NonNull الذي لا يتطابق مع أي من الأعمدة في استجابة طلب البحث. إذا كان الحقل @Nullable، ستطبع الغرفة تحذيرًا فقط. b/67115337
    • يتحقق تطبيق Room الآن من صحة الفهارس في الإصدارات الأحدث من نظام التشغيل. b/63132683
    • تختار الغرفة الدالة الإنشائية الخالية من الوسيطات تلقائيًا إذا كانت هناك عدة منصات إنشاء مطابقة في Pojo. b/67353427
    • يمكن أن تكون المفاتيح الأساسية ذات العمود الواحد Nullable إذا كانت Integer أو Long. b/67086876
    • تتعامل أداة تتبُّع البطلان مع عملية إعادة الدخول في وضع الاختبار بشكلٍ صحيح. b/65471397
    • تتحقق الغرفة الآن من عدم وجود أحرف غير صالحة في أسماء الأعمدة والجداول في وقت التجميع (الأحرف غير الصالحة: `، "). b/64749111

21 أيلول (سبتمبر) 2017

في هذا الإصدار، تصل جميع وحدات المكوّنات المعمارية إلى beta 1 على الأقل (باستثناء مكتبة تسجيل الصفحات الجديدة التي هي alpha 2).

ولا نخطط لإجراء أي تغييرات أخرى في واجهة برمجة التطبيقات. قد تحدث تغييرات غير مخطط لها، إلا أنّ شريط تغيير أي واجهة برمجة تطبيقات قبل ثبات 1.0.0 مرتفع جدًا وغير مرجّح.

  • ستتم إزالة LifecycleActivity وLifecycleFragment قبل ثبات 1.0.0. ولن تكون هناك حاجة إليها عند استخدام الإصدار 26.1.0 من Support Library أو إصدار أحدث.

على عكس مرحلة ألفا، من المقرر أن تكون مدة المرحلة التجريبية قصيرة للغاية.

التغييرات في الإصدار

  • تم تغيير اسم الغرفة أو إضافات مراحل النشاط إلى beta 1.
  • أصبح تسجيل الصفحات الآن alpha 2
  • ليس هناك أي تغييرات في مراحل الحياة (وقت التشغيل، العادي) وARC Core (عام). هاتان العنصران هما الإصدار 1.0.0 منذ 13 أيلول (سبتمبر).

عناصر جديدة

  • تحتوي دورات الحياة الآن على عنصر جديد يسمى common-java8. يحتوي هذا العنصر على واجهة جديدة باسم DefaultLifecycleMonitorer تتضمّن عمليات تنفيذ تلقائية لجميع طُرق مراحل النشاط. إذا كنت تستخدم لغة 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
    • يجب إضافة تعليقات توضيحية إلى المفاتيح الأساسية باستخدام @NonNull ما لم يتم إنشاؤها تلقائيًا. b/64292391
      • قد يتطلب هذا التغيير نقل بيانات المخطط. نعتذر عن الإزعاج الذي سبّبته هذه المشكلة.
    • تمت إضافة تعليق توضيحي جديد للملاءمة (@معاملة) يتجاهل طريقة DAO ويشغّلها داخل إحدى المعاملات.
  • دعم قاعدة بيانات SQLite:

    • تغييرات واجهة برمجة التطبيقات في ضبط قاعدة البيانات. b/65349673 b/65499876
  • الانتقال من صفحة إلى أخرى:

    • مستندات محسَّنة بشأن الانتقال إلى الصفحات تحتوي على المزيد من الأمثلة والتعليقات التوضيحية لسلاسل المحادثات

إصلاح الأخطاء

  • الغرفة:
    • يتم التعامل مع سلاسل Kotlin المتعددة الأسطر في طرق @Query بشكل صحيح. b/65809374
  • الانتقال من صفحة إلى أخرى:
    • لم تعُد عناصر الترحيل تعتمد على junit. b/65690261

1.0.0 ألفا من 9 إلى 1 - 13 أيلول (سبتمبر) 2017

هذا إصدار رئيسي حيث تصل العناصر الأساسية في مراحل النشاط (وقت التشغيل والنظام الأساسي) والنواة الأساسية (الشائعة) إلى الإصدار الثابت 1.0.0.

إلى جانب هذا التغيير، يعتمد الإصدار 26.1.0 من Support Library الآن على هذه المكتبات. ينفذ الآن كل من AppCompatActivity وقسم الدعم واجهة LifecycleOwner.

يعتمد هذا الإصدار أيضًا على الإصدار 26.1.0 من "مكتبة الدعم" للاستفادة من التكامل الجديد.

مكتبة جديدة: الانتقال من صفحة إلى أخرى

ويتضمّن هذا الإصدار أيضًا مكتبة جديدة تُسمى Page، والتي تتيح تحميل مجموعات البيانات الكبيرة بسهولة إلى RecyclerView على شكل أجزاء عند الضرورة. يتم إطلاق تقسيم الصفحات باسم alpha1 وسيكون له دورة إصدار خاصة به.

تغييرات واجهة برمجة التطبيقات

إصلاح الأخطاء

  • تتم الآن إضافة تعليقات توضيحية إلى الصفوف التي تم إنشاؤها باستخدام @Generated إذا كان التطبيق يحتوي على التعليق التوضيحي في مسار الفئة. b/35754819

  • تم إصلاح خطأ مقارنة المراقب في MediatorLiveData. b/64413274

  • طلبات بحث SQLite WITH متاحة الآن مع [LiveData]. [ref-LiveData] b/62510164

  • تم إصلاح الخطأ الذي كان لا يرسل فيه واجهة برمجة التطبيقات القائمة اليمنى في حال ملاحظة أكثر من جدول واحد. b/65099281

  • تم إصلاح الخطأ المتمثل في إنشاء غرفة لملفات مختلفة على نظام التشغيل Windows. b/64470691

  • ميزة LifecycleMonitorers في حزمة الجذر متاحة الآن. b/62310817

1.0.0 ألفا 9 - 16 آب (أغسطس) 2017

إصلاح الأخطاء

  • تم إصلاح خطأ في LiveData، بحيث تم تجاهل Monitorer الثاني عند إزالة الأولى من طريقة onChanged. b/64285805

1.0.0 ألفا 8 - 1 آب (أغسطس) 2017

التغييرات في السلوك

  • يُضاف القيد NOT NULL لأعمدة الأنواع الأساسية أو الأعمدة التي تم التعليق عليها بـ NonNull. يؤدي هذا إلى تغيير بنية الجداول الخاصة بك، لذلك إذا كنت تستخدم الإصدار ألفا 7 للبنية الأساسية أو إصدارًا أقدم، عليك تنفيذ عملية نقل البيانات إذا كنت تريد الاحتفاظ بالبيانات أو استخدام طريقة fallbackToDestructiveMigration() في أداة الإنشاء. b/62007004

تغييرات واجهة برمجة التطبيقات

1.0.0 ألفا 7 - 26 تموز (يوليو) 2017

إصلاح الأخطاء

  • تم إصلاح الخطأ الفادح في طريقة LifecycleRegistry removeObserver، ما أدى إلى إيقاف قراءة LifecycleMonitorer.

  • تم إصلاح أداة UnifiedationTracker لقواعد البيانات المخصّصة b/63162311

1.0.0 ألفا 6 - 25 تموز (يوليو) 2017

التغييرات في السلوك

  • تم تغيير ترتيب استدعاءات LifecycleMonitorer. في السابق، كان يتم استدعاء المراقبين دائمًا بترتيب إضافته: إذا تمت إضافة observer1 قبل observer2، سيتلقّى ON_CREATE وجميع الأحداث الأخرى قبل observer2. لم يعد هذا صحيحًا بالنسبة لأحداث التدمير، حيث يتم استدعاء المراقبين لهم بترتيب الجمع العكسي. وبالتالي، يكون السلوك الحالي: في حال إضافة observer1 قبل observer2، سيتم إرسال ON_CREATE أولاً إلى observer1، ثم إلى observer2 (الأمر نفسه ينطبق على ON_START وON_RESUME)، ولكن يتم إرسال الحدث ON_PAUSE أولاً إلى observer2 ثم إلى observer1 فقط (الحدث نفسه في ON_STOP وON_DESTROY).

  • تطرح الغرفة استثناءً في حال فقدان عملية نقل البيانات. في السابق، كان يتم فقط محو قاعدة البيانات في تطبيق Room، ولكن يتعطّل الآن. يمكن للمطورين الموافقة على سلوك المقاصة من خلال استدعاء واجهة برمجة التطبيقات الخاصة بأداة الإنشاء. b/63872392

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة طريقة fallbackToDestructiveMigration() إلى RoomDatabase.Builder لمحو قاعدة البيانات في حال عدم توفُّر عملية نقل البيانات. b/63872392

  • تعتمد مكونات البنية الآن على الإصدار 26.0.0 من مكتبة الدعم

إصلاح الأخطاء

  • تم إصلاح طريقة معالجة @Relation المضمّنة في @embedded. b/63736065

  • إصلاح عمليات نقل بيانات الاختبار للجداول التي تتضمن مفتاحًا أساسيًا تمت إضافته تلقائيًا. b/63393618

  • والآن، يتم الآن تلقّي الوسيطات بشكلٍ صحيح من خلال @استعلامات التي تشغِّل طلبات بحث DELETE أو UPDATE بشكل صحيح. b/63872538

  • يتم الآن الاحتفاظ بـ ViewModels، عندما يكون جزء المالك في الحزمة الخلفية ويحدث تغيير الإعداد مرتين. b/38445801

1.0.0 ألفا 5 - 18 يوليو 2017

تغييرات واجهة برمجة التطبيقات

عليك الاعتماد على عناصر android.arch.persistence.room:rxjava2 لإضافة دعم RxJava إلى Room.

إصلاح الأخطاء

  • تم إصلاح طلبات بحث @Delete بدون أي معلمات. b/63608092

  • عمليات التحقق من أنواع الغرف ذات الصلة بالحروف والقيم. b/63733651

1.0.0 ألفا 4 - 11 يوليو 2017

تغييرات واجهة برمجة التطبيقات

  • تمت إضافة طريقة معالجة جديدة (runInTransaction()) إلى RoomDatabase.

  • يمكن أن تحتوي الطرق @Insert و@Delete و@Update الآن على معلَمات من أنواع مختلفة من الكيانات. b/62682405

إصلاح الأخطاء

  • تم إصلاح معالجة byte[] في @Dao طريقة. b/62460045

  • تستخدم الآن عملية تسجيل نقل البيانات في الغرفة مقارنة غير حساسة لحالة الأحرف. b/62875382

  • تم إصلاح إعدادات الحماية الخاصة بعنصر دورات الحياة. b/62113696

1.0.0 ألفا 3 - 15 حزيران (يونيو) 2017

تغييرات واجهة برمجة التطبيقات

  • تتوافق أداة @OnLifecycleEvent مع مَعلمة حدث واحدة فقط الآن. يُعد هذا تغييرًا استعدادًا لدعم Java 8 بحيث يمكننا الانتقال إلى الواجهات ذات الطرق الافتراضية في المستقبل. في ما يتعلق بهذا التغيير، يمكن فقط أن تتلقّى طرق @OnLifecycleEvent(ON_ANY) التي تتضمّن تعليقات توضيحية معلَمة ثانية من النوع Event (المعلمة الأولى هي LifecycleOwner). يمكنك الاطّلاع على مستندات رحلة المستخدم للحصول على التفاصيل.

  • تم نقل صفَي LifecycleActivity وLifecycleFragment إلى عنصر android.arch.lifecycle:extensions.

  • يتلقّى migrationTestHelper مثيل Hardwareation بدلاً من Context بحيث تتاح له قراءة المخطط من مواد العرض قيد الاختبار وإنشاء قاعدة البيانات في سياق التطبيق.

  • يمكن الآن أن تشتمل التعليقات التوضيحية @Insert و@Delete و@Update في طرق @DAO على Iterable كنوع المعلَمة. b/62259820

إصلاح الأخطاء

  • لم يعد يتم استدعاء الأساليب التي يتم إلغاؤها مع أحداث مراحل النشاط عدّة مرات.

  • يتم الآن التعامل مع معلَمات IN المتعددة بشكل صحيح. b/62608681

  • يمكن أن تحتوي فئات DAO التجريدية الآن على دالة إنشائية تتلقى المثيل @Database. b/38488747

  • يمكن أن يكون لـ DAO الآن فئة/واجهة فائقة بمعلمات النوع. b/62103620

1.0.0 ألفا 2 - 2 حزيران (يونيو) 2017

تغييرات واجهة برمجة التطبيقات

إصلاح الأخطاء

  • حماية الملفات لمراحل الحياة. (b/62113696)
  • فقدان البيانات بسبب محولات الأنواع (b/62100716)
  • السماح بعرض Long[] من @Insert طلب بحث.

1.0.0 ألفا 1 - 17 أيار (مايو) 2017

MinSDK: 14

تنبيهات عامة

  • على الرغم من أننا أجرينا الكثير من الاختبارات قبل الإطلاق، لا تزال مكونات البنية في مرحلة الإصدار الأولي. إذا كنت تنشئ تطبيقًا للإنتاج، يُرجى العلم بأنّ واجهة برمجة التطبيقات ستتغيّر قبل الإصدار 1.0 وقد لا تكون فعّالة بالكامل. إذا لم تكن تشعر بالراحة عند تصحيح المشكلات في المكتبات التي تستخدمها، فإننا نوصي بتجربة مكونات البنية في المشروعات الجانبية أولاً.

  • لا ننصح جميع المستخدمين بنقل البيانات اليوم. سيكون لدينا دليل نقل جاهز للإصدار 1.0 من مكونات البنية.

القيود والمشاكل المعروفة