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

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

مدير العمل

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

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

  • تم إصلاح الحالة الهامشية حيث يمكن تشغيل العمل الدوري أكثر من مرة لكل فاصل على الأجهزة التي تعمل بنظام التشغيل 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

مدير العمل

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

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

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

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

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

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

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

  • لن تعود "MenuItem" التي تستخدم "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 Plugin 3.4 Canary 4 والإصدارات الأحدث b/119662045

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

مدير العمل

تم إصدار WorkManager 1.0.0-alpha13. يحتوي هذا الإصدار على تغيير بسيط في واجهة برمجة التطبيقات سيكون مفيدًا لبعض مستخدمي 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 من "مكتبة الدعم". 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
  • وهناك العديد من الفئات والطرق التي لا تهدف إلى التصنيف الفرعي، مثل "NavOptions" و"NavInflater" و"NavDeepLinkBuilder" و"AppBarConfiguration" تم إجراء final aosp/835681
  • تمت إزالة طريقة 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

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

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

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

مدير العمل

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

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

  • يقدّم عنصر جديد، اسمه "work-rxjava2"، ميزة "RxWorker". هذه ListenableWorker من المتوقّع أن تكون في Single<Payload>.
  • تمّت إزالة دعم JobDispatcher من Firebase بسبب اقتراب موعد إيقافه. ويعني هذا أنّه لن يتم تحديث عنصر "work-firebase" مع بدء الإصدار التجريبي. ونحن نسعى إلى إضافة بديل في المستقبل.
  • سيتم تجميع Payload إلى Result. تم تغيير دور Result إلى "فئة مختومة". من خلال ثلاثة طرق تنفيذ ملموسة، يمكنك الحصول عليها من خلال Result.success() (أو Result.success(Data)) وResult.failure() (أو Result.failure(Data)) وResult.retry(). نتيجة ListenableFuture هي Result بدلاً من Payload. لا تحتوي Worker على طريقتَي getter وsetter للمخرجات 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

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

  • تمّت إزالة دعم JobDispatcher من Firebase بسبب اقتراب موعد إيقافه. ويعني هذا أنّه لن يتم تحديث عنصر "work-firebase" مع بدء الإصدار التجريبي. ونحن نسعى إلى إضافة بديل في المستقبل.
  • سيتم تجميع Payload إلى Result. تم تغيير دور Result إلى "فئة مختومة". من خلال ثلاثة طرق تنفيذ ملموسة، يمكنك الحصول عليها من خلال Result.success() (أو Result.success(Data)) وResult.failure() (أو Result.failure(Data)) وResult.retry(). نتيجة ListenableFuture هي Result بدلاً من Payload. لا تحتوي Worker على طريقتَي getter وsetter للمخرجات 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 الآن سلسلة بدلاً من تعداد. يسمح هذا الإجراء باستخدام أدوات إنشاء الرموز المميّزة المخصّصة بواسطة الغرفة. لا يزال يتم تحديد أدوات إنشاء الرموز المميّزة المضمَّنة في FtsOptions كثوابت سلسلة. b/119234881

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

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

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

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

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

مدير العمل

تم إصدار WorkManager 1.0.0-alpha11. يتضمّن هذا الإصدار العديد من التغييرات التي ستصبح واجهة برمجة تطبيقات مستقرة في 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() API لإدراج 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

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

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

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

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

تم إصدار صفحة 2.1.0-alpha01 مع إضافتَين رئيسيتَين، هما إسقاط الصفحة ومكتبات إضافات KTX لكل العناصر، بالإضافة إلى العديد من التغييرات الأخرى وإصلاحات الأخطاء في واجهة برمجة التطبيقات.

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

  • تمت إضافة PagedList.Config.Builder.setMaxSize() للحدّ من عدد العناصر التي تم تحميلها في الذاكرة.
  • تمت إضافة اللغة androidx.paging.Config() كبديل للغة PagedList.Config.Builder بلغة Kotlin.
  • تمت إضافة اللغة androidx.paging.PagedList() كبديل للغة PagedList.Builder بلغة Kotlin.
  • تمت إضافة اللغة DataSourceFactory.toLiveData() كبديل للغة LivePagedListBuilder بلغة Kotlin.
  • تمت إضافة DataSourceFactory.toObservable() وtoFlowable() كبدائل لغة Kotlin للغة RxPagedListBuilder.
  • تمت إضافة 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

مدير العمل

تم إصدار WorkManager 1.0.0-alpha10 مع دعم للعمل غير المتزامن الذي يتحكم فيه المطوّر. هناك تغييرات قد تؤدي إلى عطل في واجهة برمجة التطبيقات في هذا الإصدار. يُرجى الاطّلاع على القسم 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' من ملف Gradle.
  • تمت إضافة إعدادات Proguard للاحتفاظ بدالة إنشاء Worker الجديدة. b/116296569
  • إصلاح NullPointerException المحتمَلة في حالة السباق التي تم فيها بدء العمل بـ REPLACE يوم b/116253486 وb/116677275
  • يقبل WorkContinuation.combine() الآن WorkContinuation واحدة أو أكثر بدلاً من اثنين أو أكثر. b/117266752

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

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

الميزات:

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

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

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

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

Room

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

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

  • FTS: تتيح الغرفة الآن الكيانات التي تتضمّن جدول ربط FTS3 أو FTS4. يمكن الآن إضافة تعليقات توضيحية أيضًا باستخدام @Fts3 أو @Fts4 للفئات التي تحتوي على تعليقات توضيحية باستخدام @Entity، وذلك للإعلان عن فئة باستخدام جدول بحث في النص الكامل للتعيين. تتوفّر خيارات 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

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

  • تم إصلاح مشكلتين هما لا يمكن استرداد الغرفة بشكل صحيح من قاعدة بيانات تالفة أو عملية نقل بيانات غير صالحة أثناء الإعداد. 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.

مراحل النشاط

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

  • تم إصلاح قاعدة ViewModel Proguard التي أزالت التركيبات الإنشائية بشكلٍ غير صحيح 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
  • تحتوي فئات الاتجاهات والوسيطات الآن على تنفيذ toString() مفيد b/111843389

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

مدير العمل

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

مشكلة معروفة

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

Groovy

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 الجديدة داخليًا (بدون اعتماديات Java). سنضيف ListenableFutures إلى واجهة برمجة التطبيقات في الإصدارات القادمة. سيتيح هذا التغيير إظهار NonBlockingWorker في النهاية.
  • يمكنك إضافة إمكانية تشغيل العمل المحدد بزمن في TestDriver من خلال TestDriver.setInitialDelayMet(UUID) وTestDriver.setPeriodDelayMet(UUID). b/113360060

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

  • تم إيقاف دالتَي الإنشاء Worker وNonBlockingWorker التلقائيتين نهائيًا. يُرجى الانتقال إلى الدالة الإنشائية الجديدة في أقرب وقت ممكن. ستزيل الإصدارات المستقبلية الدالة الإنشائية الافتراضية.

27 آب (أغسطس) 2018

مدير العمل

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

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

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

16 آب (أغسطس) 2018

مدير العمل

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

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

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

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

  • تم تمديد صف جديد، وهو "NonBlockingWorker"، من قِبل "Worker". ولن يؤثر ذلك في أي استخدام حالي. في المستقبل، سيصبح 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 مع إصلاحات للأخطاء.

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

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

6 آب (أغسطس) 2018

إصدارات AndroidX من إصدارَي Lifecycle وroom وpaging و2.0.0-rc01. لم تتغيّر جميع العناصر من 2.0.0-beta01.

1 أغسطس 2018

مدير العمل

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

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

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

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

مدير العمل

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

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

  • تمت إضافة تعليقات توضيحية إلى "WorkManager.getInstance()" باستخدام @NonNull بدلاً من @Nullable. بدلاً من ذلك، إذا لم يتم إعداد اللغة المفردة بشكل صحيح في حالات الإعداد اليدوي، ستعرض الطريقة IllegalStateException. This is a قد يؤدي إلى كسر في واجهة برمجة التطبيقات.
  • تمت إضافة واجهة برمجة تطبيقات جديدة، وهي 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 gradle المرتبط على عدد من التغييرات في واجهة برمجة التطبيقات وتغييرات السلوك وإصلاحات الأخطاء.

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

  • يضبط NavHostFragment الجزء الحالي دائمًا كجزء التنقّل الأساسي، مع ضمان تمييز مدراء الأجزاء الفرعية قبل تمييز NavHostFragment b/111345778

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

  • تغيير قد يؤدي إلى عطل: تم تغيير app:type إلى app:argType لتجنُّب التضارب مع المكتبات الأخرى مثل ConstraintLayout 2.0.0-alpha1 b/111110548
  • يمكن الآن النقر على رسائل الخطأ الواردة من "الوسيطات الآمنة" b/111534438.
  • تؤكد فئات الوسيطات الآن أن سمات NonNull ليست فارغة في الواقع b/111451769
  • تمت إضافة تعليقات NonNull توضيحية إضافية إلى الفئات التي تم إنشاؤها بواسطة NavDirections وAgs b/111455455 b/111455456

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

  • تم إصلاح مشكلة زر الرجوع في النظام بعد الربط لموضع معيّن بوجهة مجزأة b/111515685

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

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

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

  • تمت إضافة طريقة 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" مع defaultValues على شكل "123L" b/79563966.
  • أصبحت الوسيطات القابلة للتعديل متاحة الآن باستخدام اسم فئة مؤهل بالكامل للسمة app:type. إنّ القيمة التلقائية الوحيدة المسموح بها هي "@null" b/79563966.
  • تنفِّذ فئات الوسيطات الآن equals() وhashCode() b/79642246
  • يمكن الآن تطبيق المكوّن الإضافي Safe Args على مشاريع المكتبة b/80036553.
  • يمكن الآن تطبيق المكوّن الإضافي Safe Args على المشاريع المميّزة b/110011752.

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

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

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

إصدارات AndroidX من إصدارَي Lifecycle وroom وpaging و2.0.0-beta01.

مراحل النشاط

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

  • تم إصلاح قاعدة Proguard لـ LifecycleObserver للاحتفاظ بعمليات التنفيذ فقط، وليس الواجهات الفرعية b/71389427
  • تم إصلاح قواعد حماية ViewModel للسماح بالتشويش والتقليص.

Room

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

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

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

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

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

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

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

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

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

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

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

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

مدير العمل

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

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

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

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

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

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

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

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

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

Room

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

مدير العمل

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

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

  • تم إصلاح شرط سباق في التنفيذ المستند إلى 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

  • إضافة دعم Jobparams#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

  • انتقِل الآن إلى عناوين URLDecodes للوسيطات التي تم تحليلها من عناوين URL للروابط المؤدية إلى صفحات معيَّنة. b/79982454

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

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

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

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

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

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

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

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

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

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

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

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

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

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

مدير العمل

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

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

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

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

  • تم نقل إزالة عمليات قفل التنشيط المرتبطة بالثانية Worker إلى سلسلة المحادثات في الخلفية.

  • يتم الآن محو تنفيذ "AlarmManager" بشكلٍ صحيح عند اكتمال جميع الأعمال المعلَّقة.

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

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

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

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

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

  • بإمكان "Worker" التفاعل مع إيقاف الإشعارات. يمكن استخدام "Worker.isStopped()" للتحقّق مما إذا تم إيقاف "Worker". يمكن استخدام Worker.onStopped() لإجراء عمليات إزالة بسيطة.

  • تعرض واجهة برمجة التطبيقات Worker.getTags() العلامة 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 Alphas، الغرفة 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 alpha. ضِمن بالإضافة إلى ذلك، يتضمن التنقل و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 وPaging RxJava 1.0.0-alpha1.

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

تم توفير دعم Alpha RxJava2 لنظام الترحيل كوحدة اختيارية منفصلة (android.arch.paging:rxjava2:1.0.0-alpha1). وسيتم إصدار كل إصدار بشكل مؤقت على حدة إلى أن يستقر

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

Kotlin

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

Java

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

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

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

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

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

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

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

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

  • تم إصلاح عضو واحد (PagedList.mCallbacks) لجعله خاصًا.

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

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

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

Room

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

  • تم إصلاح خطأ فادح في عمليات تنفيذ Rx Single وMaybe في الغرفة حيث سيعيد تدوير الاستعلام مسبقًا، مما يتسبب في مشكلات إذا أضفت أكثر من 1 المراقب للقيم التي تم إرجاعها وهي 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 بسهولة باستخدام دعم الوسيطات)
  • طريقة fallbackToDestructiveMigrationFrom في RoomDatabase.Builder تقبل الآن vararg int بدلاً من vararg Integer.

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

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

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

  • الترحيل: يتعامل تنفيذ مصدر البيانات في الغرفة الآن بشكل صحيح مع التبعيات متعددة الجداول (مثل العلاقات وعمليات الربط). في السابق، لم تنجح هذه الخطوات في تشغيل نتائج جديدة أو كانت يتعذّر تجميعها. 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.Found
    • يسمح لك 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 لـ ValidationTracker الطرق متزامنة الآن ويجب استدعاؤها على سلسلة محادثات لا تستخدم واجهة المستخدم. يمنع هذا بعض شروط السباق أثناء مراقبة الجداول.

  • هناك طريقة clearAllTables() جديدة في RoomDatabase تقتطع كل محتويات الجدول. b/63807999

  • تستخدم SupportSQLiteQuery الآن طريقة getArgCount() تعرض الرقم لمعلمات طلب البحث. b/67038952

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

  • أصبحت ميزة "@RawQuery" متوافقة الآن بشكل صحيح مع طلبات البحث في الصفحات. b/72600425

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

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

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

كانت الفئات التي تم نقلها مفيدة بجانب RecyclerView، بشكل مستقل عن مكتبة Paging. ويعني هذا أنّه يمكن استخدامها بدون الاعتماد على إصدار الصفحات الأولية، ولكن يعني أيضًا أنّ التطبيقات التي تستخدم نظام الترحيل يجب ترقيتها إلى الإصدار Alpha 6 والإصدار 27.1.0 من Support Library في الوقت نفسه.

** دليل نقل البيانات للإصدار 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.

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

  • تتيح الغرفة الآن فتح قاعدة البيانات في وضع التسجيل المسبق للكتابة. في هذا الوضع، لن تحظر عمليات الكتابة طلبات البحث التي يتم قراءتها. على الرغم من وتستهلك قدرًا أكبر من الذاكرة (بسبب الاتصالات المتعددة)، فعادةً ما يتم بسرعة أكبر. ستستخدم الغرفة تلقائيًا WAL إذا كان حجم الجهاز API 16 أو أعلى وكان ليس جهاز ذاكرة منخفضة. يمكنك التحكم في هذا السلوك باستخدام setJournalMode() على RoomDatabase.Builder. b/67757002

  • فريق دعم Guava: يمكن الآن حضور الغرفة 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

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

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

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

  • تعالج الغرفة الآن حقول 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 بما يلي تحكم أكثر دقة في إصدارات المخطط التي تبدأ منها عمليات الترحيل المدمرة مسموح به (مقارنةً بأداة fallbackToDestructiveMigration) b/64989640
  • لا تتيح الغرفة الآن إلا واجهات برمجة التطبيقات الجديدة لنظام الترحيل (الإصدار alpha-4 أو الإصدارات الأحدث)، وسيتم إيقاف إتاحة واجهات برمجة التطبيقات المتوقّفة نهائيًا. LivePagedListProvider لاستخدام الإصدار الأولي للغرفة، عليك استخدام أسلوب الترحيل. alpha-4 أو أعلى والتبديل من LivePagedListProvider إلى LivePagedListBuilder إذا لم يسبق لك إجراء ذلك.

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

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

الترحيل 1.0.0-alpha5

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

  • إصلاح تحميل الصفحة عند إيقاف العناصر النائبة b/70573345
  • تسجيل إضافي لتتبع خطأ UnknownArgumentException b/70360195 (وإصلاح خلل من جانب الغرفة)
  • إصلاحات نماذج رموز Javadoc 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(Helper) 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

    • تعود الآن دورة الحياة بمقدار WeakReference إلى مالك دورة الحياة لتجنّب تسريب 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>(...);}
  • الغرفة:

    • تطبع الغرفة الآن رسالة خطأ في وقت التجميع عند إرجاع Pojo في تحتوي طريقة @Query على حقل @NonNull لا يُطابق أيًا من والأعمدة في استجابة الاستعلام. إذا كان الحقل هو @Nullable، الغرفة فقط يعرض رسالة تحذير. b/67115337
    • تتحقّق الغرفة الآن من الفهارس في الإصدارات الأحدث من نظام التشغيل. b/63132683
    • تختار الغرف أداة إنشاء بدون وسيط بشكل تلقائي إذا كانت هناك عدة واجهات الأشكال الإنشائية المطابقة في بوجو. 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 أو الإصدارات الأحدث.

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

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

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

العناصر الجديدة

  • تتوفّر الآن لدورات الحياة عنصر جديد باسم "common-java8". يحتوي هذا العنصر على واجهة جديدة تسمى DefaultLifecycleObserver. أي لديها عمليات تنفيذ افتراضية لجميع طرق دورة الحياة. إذا كنت تستخدم لغة 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

كلا هذين العنصرين يعتمدان بالفعل على الغرفة، لذا ما لم تكن تستخدمهما بشكل مباشر، لن تحتاج إلى تغيير أي شيء في ملفات الإصدار.

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

  • الغرفة:

    • يتيح الآن التعليق التوضيحي @ColumnInfo إعداد تجميع في العمود. b/62007004
    • يتم الآن تجاهل حقلَين (transient) تلقائيًا ما لم تتم إضافة تعليقات توضيحية إليهما باستخدام @ColumnInfo. @Embedded أو @Relation. b/62600692
    • يجب إضافة تعليقات توضيحية إلى المفاتيح الأساسية باستخدام @NonNull ما لم يتم إنشاؤها تلقائيًا. b/64292391
      • قد يتطلّب هذا التغيير نقل بيانات المخطط. نعتذر عن الإزعاج الذي سبّبته هذه المشكلة.
    • تمت إضافة تعليق توضيحي جديد ملائم (@transaction) وهو يؤدي هذا الإجراء إلى إلغاء طريقة DAO وتنفيذها داخل إحدى المعاملات.
  • دعم قاعدة بيانات SQLite:

    • تغييرات واجهة برمجة التطبيقات في تهيئة قاعدة البيانات. b/65349673 b/65499876
  • الترحيل:

    • مستندات محسنة حول التنقل في الصفحات تضم المزيد من الأمثلة والتعليقات التوضيحية لسلاسل المحادثات.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • أصبحت LifecycleObservers في الحزمة الجذر متاحة الآن. b/62310817

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

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

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

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

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

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

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

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

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

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

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

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

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

  • تم تغيير ترتيب استدعاءات 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 يمحو قاعدة البيانات فقط، ولكنه يتعطّل الآن. يمكن للمطوّرين الموافقة على سلوك المقاصة من خلال طلب واجهة برمجة تطبيقات أداة الإنشاء. b/63872392

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

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

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

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

  • تم دمج معالجة @relation بشكل ثابت في @inline. b/63736065

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

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

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

1.0.0 ألفا 5 - 18 تموز (يوليو) 2017

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

يجب الاعتماد على عنصر واحد (android.arch.persistence.room:rxjava2) لإضافة دعم RxJava إلى الغرفة.

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

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

  • يتم التحقّق من نوع الغرفة الثابتة للمستخدمين الذين يتلقّون المساعدة والقائمين بالضبط. b/63733651

1.0.0 ألفا 4 - 11 تموز (يوليو) 2017

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

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

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

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

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

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

  • تم إصلاح إعدادات Proguard لعنصر "مراحل الحياة". b/62113696

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

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

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

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

  • تستقبل MigrationTestHelper مثيل instrumentation بدلاً من Context من أجل قراءة المخطط من مواد العرض التجريبية وإنشاء قاعدة البيانات في سياق التطبيق.

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

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

  • لم يعُد يتم استدعاء الطرق التي تم تجاوزها مع أحداث مراحل النشاط عدة مرات.

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

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

  • يمكن لـ DAO الآن أن يحتوي على فئة/واجهة مميزة مع معلَمات النوع. b/62103620

1.0.0 Alpha 2 - 2 حزيران (يونيو) 2017

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

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

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

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

MinSDK: 14

تنبيهات عامة

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

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

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