البرنامج التعليمي لخدمات Android: كيفية تشغيل تطبيق في الخلفية؟

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

غالبًا باستخدام تطبيقات متعددة على هاتفك الذكي ، قد ترغب في التبديل من تطبيق إلى آخر ولكن أيضًا تأكد من أن جميع تطبيقاتك تظل نشطة في الخلفية. هذه ليست سوى الخدمات التي تقدمها . لذلك ، ستساعدك هذه المقالة حول البرنامج التعليمي لخدمات Android في فهم كيفية العمل مع الخدمات.

سأغطي الموضوعات التالية:





ما هي خدمات Android؟

الخدمة هي في الأساس عملية. خدمة Android هو مكون يعمل في الخلفية لأداءعمليات طويلة الأمد دون التفاعل مع المستخدم وتعمل حتى في حالة إتلاف التطبيق.يمكن لمكون تطبيق آخر بدء تشغيل خدمة ويستمر تشغيلها في الخلفية حتى إذا قمت بالتبديل إلى تطبيق آخر.

بالإضافة إلى ذلك ، يمكن للمكون أن يرتبط بخدمة ما للتفاعل معها وأيضًا إجراء اتصال بين العمليات.



ملحوظة: android.app.Service هي فئة فرعية من فئة ContextWrapper وخدمة Android ليست سلسلة رسائل أو عملية منفصلة.

Android- دورة حياة الخدمات

يمكن أن تشتمل دورة حياة خدمات Android على شكلين من الخدمات. تتبع دورة حياة الخدمة مسارين مختلفين ، وهما:

  1. بدأت
  2. مقيد

بدأت



تبدأ الخدمة عندما يتصل أحد مكونات التطبيق إبدأ الخدمة () طريقة. بمجرد البدء ، يمكن تشغيل الخدمة في الخلفية إلى أجل غير مسمى ، حتى إذا تم إتلاف المكون المسؤول عن البداية. تم إيقافه باستخدام خدمة محطة () طريقة. يمكن للخدمة أيضًا إيقاف نفسها عن طريق استدعاء stopSelf () طريقة.

مقيد

تكون الخدمة ملزمة عندما يرتبط بها أحد مكونات التطبيق عن طريق الاتصال bindService () . تقدم الخدمة المقيدة واجهة خادم عميل تسمح للمكونات بالتفاعل مع الخدمة وإرسال الطلبات والحصول على النتائج. يعالج عبر الاتصال بين العمليات (IPC). يمكن للعميل إلغاء ربط الخدمة عن طريق الاتصال بـ إلغاء ربط الخدمة () طريقة.

دورة حياة خدمة Android - البرنامج التعليمي لخدمات Android - Edureka

بالانتقال إلى القسم التالي من هذه المقالة حول خدمات Android ، دعنا نناقش الاختلافطرق تحت فئة الخدمة.

دروس خدمات Android: الطرق

هناك عدة طرق يمكنك من خلالها إجراء العمليات بسهولة على أي تطبيق. ومنهم:

طريقةوصف
onStartCommand ()

يتم استدعاء هذه الطريقة عندما يطلب أي مكون آخر ، مثل نشاط ما ، بدء تشغيل الخدمة ، عن طريق الاتصال إبدأ الخدمة () .

تقع على عاتقك مسؤولية إيقاف الخدمة عند الانتهاء من العمل المقابل باستخدام stopSelf () أو خدمة محطة () طرق.

فك ()

يستدعي هذه الطريقة عندما يريد مكون آخر الارتباط بالخدمة عن طريق الاتصال bindService () .

لتنفيذ ذلك ، يجب عليك توفير واجهة يستخدمها العملاء للتواصل مع الخدمة. تقوم بإرجاع ملف آي بيندر موضوع. إذا كنت لا تريد السماح بالربط ، فارجع لا شيء .

onUnbind ()

يستدعي النظام هذه الطريقة عندما يتم قطع اتصال جميع العملاء بواجهة معينة منشورة بواسطة الخدمة.

onRebind ()

يستدعي هذه الطريقة عند اتصال عملاء جدد بالخدمة بعد أن تم إخطارهم مسبقًا بفصل جميع العملاء onUnbind (النية) .

عند الإنشاء ()

يستدعي النظام هذه الطريقة عند إنشاء الخدمة لأول مرة باستخدام onStartCommand () أو فك () . يلزم إجراء إعداد لمرة واحدة.

onDestroy ()

يتم استدعاء هذه الطريقة عندما لا يتم استخدام الخدمة ويتم إتلافها. يجب أن تقوم خدمتك بتنفيذ هذا من أجل تنظيف أي موارد مثل سلاسل الرسائل ، والمستمعين المسجلين ، وأجهزة الاستقبال ، وما إلى ذلك.

كود الهيكل العظمي

يوسع MainActivity للفئة العامة النشاط {private TextView textView private BroadcastReceiver receiver = new BroadcastReceiver () {Override public void onReceive (Context Context، Intent intent) {Bundle bundle = intent.getExtras () if (bundle! = null) {String string = bundle.getString (DownloadService.FILEPATH) int resultCode = bundle.getInt (DownloadService.RESULT) if (resultCode == RESULT_OK) {Toast.makeText (MainActivity.this، 'اكتمل التنزيل. تنزيل URI: '+ string، Toast.LENGTH_LONG) .show () textView.setText ('تم التنزيل')} else {Toast.makeText (MainActivity.this، 'فشل التنزيل'، Toast.LENGTH_LONG) .show () textView.setText ('فشل التنزيل')}}}} Override public void onCreate (Bundle saveInstanceState) {super.onCreate (saveInstanceState) setContentView (R.layout.activity_main) textView = (TextView) findViewById (R.id.status)}Override protected void onResume () {super.onResume () ) registerReceiver (المتلقي ، IntentFilter الجديد (DownloadService.NOTIFICATION))}Override محمية باطلة onPause () {super.onPause () unregisterReceiver (Receiver)} public void onClick (عرض العرض) {Intent intent = new Intent (this، DownloadService.class) // أضف معلومات للخدمة التي تريد تنزيل الملف وأين store intent.putExtra (DownloadService.FILENAME، 'index.html') intent.putExtra (DownloadService.URL، 'www.edureka.co') startService (intent) textView.setText ('تم بدء الخدمة')}}

في هذا المثال ، يمكنك مشاهدة طرق مثل عند الإنشاء () و onResume () و onPause () . تشكل هذه الطرق هيكل الخدمات في Android.

الآن ، نصل إلى الجزء العملي من هذا البرنامج التعليمي لخدمات Android ، دعنا نرىكيفية إنشاء خدمة والتعامل معها.

تجريبي

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

الخطوة 1

إنشاء مشروع جديد فارغ. قم بتسمية مشروعك وانقر فوق مجلد Java وانقر فوق النشاط الرئيسي . أولا ، أضف مشغل وسائط حتى تتمكن من استيراد تفاصيل المشغل مثل البداية وتعيين الحلقة وما إلى ذلك.

package com.example.mydemoapplication import androidx.appcompat.app.AppCompatActivity الفئة العامة MainActivity يوسع AppCompatActivity {Override المحمي void onCreate (Bundle saveInstanceState) {super.onCreate (saveInstanceState) setContentView (R.layout.activity_main) (هذا ، Settings.System.DEFAULT_ALARM_ALERT_URI) player.setLooping (true) player.start ()}}

ملاحظة: إذا كنت تستخدمه لأول مرة ، فلا تنس تمكين BIOS. يمكنك القيام بذلك عن طريق إعادة تشغيل النظام الخاص بك.

سيكون عليك إضافة جهاز افتراضي. فقط اضغط على افتح مدير AVD.

حدد جهازًا من اختيارك وأنت على استعداد للانطلاق!

لن يتم تشغيل هذا إلا عندما تكون الشاشة نشطة ولكن لجعل هذا التطبيق يعمل حتى في الخلفية ، تحتاج إلى إضافة بضعة أسطر من التعليمات البرمجية في Activity_main.xml ملف.

الخطوة 2

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

دعونا نرى كيف يمكن القيام بذلك.

  • قم بإنشاء فئة أخرى في مجلد Java وقم بتسميتها. هنا ، سميته ' MyService '.
  • تعمل هذه الفئة على توسيع فئة الخدمة.
  • بمجرد حصولك على طرق فئة الخدمة ، قم بتنفيذ الطرق بالنقر فوق alt + أدخل.
  • بعد ذلك ، عليك تجاوز الأساليب. لذلك ، انقر بزر الماوس الأيمن على النافذة للحصول على الخيارات.
  • قم بتوليد طرق التجاوز ، حدد onStartCommand () و و OnDestroy ().
  • قم بتحرير ملف onStartCommand () الطرق بإضافة الكود التالي:
MediaPlayer player = MediaPlayer.create (هذا ، Settings.System.DEFAULT_ALARM_ALERT_URI) player.setLooping (true) player.start ()

ملحوظة: احذف هذا الرمز في ملف النشاط الرئيسي.

  • سيؤدي هذا إلى ظهور خطأ يطلب منك إزالة العبارة. لذلك ، قم بإزالة بيان الإرجاع والإعلان عن MediaPlayer كطريقة خاصة وإرجاعه START_STICKY . هذا سيعيد حالة البداية.
  • أضف player.stop () في ال onDestroy () طريقة.

الخطوه 3

اذهب إلى لحم بقري وانتقل إلى التخطيطات ، انقر فوق android_main.xml للحصول على ملف XML للتطبيق.

  • قم بإزالة TextView واستبدله بـ LinearLayout وإضافة الأزرار. أضف الكود المقابل.
<التخطيط الخطي ذكري المظهر:اتجاه= عمودي ذكري المظهر: layout_width= 'match_parent' ذكري المظهر: layout_height= 'wrap_content' ذكري المظهر: layout_center عمودي= 'صحيح' أدوات:تجاهل= 'MissingConstraints'><زر ذكري المظهر:هوية شخصية= '@ + id / buttonStart' ذكري المظهر:نص= 'بدء الخدمة' ذكري المظهر: layout_width= 'wrap_content' ذكري المظهر: layout_height= 'match_parent'/><زر ذكري المظهر:هوية شخصية= '@ + id / buttonStop' ذكري المظهر:نص= 'إيقاف الخدمة' ذكري المظهر: layout_width= 'wrap_content' ذكري المظهر: layout_height= 'match_parent'/>التخطيط الخطي>
  • بمجرد القيام بذلك ، ارجع إلى النشاط الرئيسي class وإضافة الكود المقابل لربط ملف XML و MyServiceClass.
package com.example.newproject import androidx.appcompat.app.AppCompatActivity public class MainActivity توسع AppCompatActivity تنفذ View.OnClickListener {private Button start، stopOverride protected void onCreate (Bundle saveInstanceState) {super.onCreate (saveInstanceState) .activity_main) start = (Button) findViewById (R.id.buttonStart) stop = (Button) findViewById (R.id.buttonStop) start.setOnClickListener (this) stop.setOnClickListener (this)}Override public void onClick (View view ) {if (view == start) {startService (new Intent (this، MyServiceClass.class))} else if (view == stop) {stopService (new Intent (this، MyServiceClass.class))}}}

الخطوة 4

بمجرد الانتهاء من ربط الفئات ، فلنقم بتشغيل الكود.

ملاحظة: أضف اسم فئة الخدمة في ملف AndroidManifiest.xml.

ما هو key Error في Python

بعد ذلك ، لنبدأ تشغيل الكود.

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

هذا عرض توضيحي بسيط حيث تعلمت كيفية العمل مع خدمات Android.

بهذا نصل إلى نهاية هذه المقالة حول 'البرنامج التعليمي لخدمات Android'.أتمنى أن تكون واضحًا في الموضوعات التي تتناولها هذه المدونة.

الآن بعد أن قمت بالاطلاع على مدونة البرامج التعليمية لخدمات Android ، يمكنك الاطلاع على Edureka’s لبدء التعلم بسرعة.

هل لديك أي استفسار؟ لا تنسَ ذكرها في تعليقات مدونة 'دروس خدمات Android' هذه. سوف نعود اليك.