Mohamed Foudane نشر 23 فبراير 2022 أرسل تقرير نشر 23 فبراير 2022 السلام عليكم هل هناك امكانية لتشغيل دالتين بالترتيب بحيث لا تبدأ الأولى حتى تكتمل الثانية ؟ تعبت في البحث عن طريقة للقيام بهذا .. 1 اقتباس
0 Wael Aljamal نشر 23 فبراير 2022 أرسل تقرير نشر 23 فبراير 2022 أرجو مشاركة الشيفرة البرمجية مع تحديد الدالتين لنستطيع مساعدتك بشكل أفضل. اقتباس
0 Mohamed Foudane نشر 23 فبراير 2022 الكاتب أرسل تقرير نشر 23 فبراير 2022 الفكرة ببساطة هي : private void loadBannerAd () { ...//الدالة الأولى ... } private void showBannerAd () { ...//الدالة الثانية ... } عند استدعاء الدالة الثانية التي هي showBannerAd لا اريد ان تشتغل حتى تنتهي الأولى لأن الأولى تستغرق قليل من الوقت وبذلك قد لا يظهر الإعلان لأن التحميل لم يكتمل بعد !!! 1 اقتباس
0 Wael Aljamal نشر 23 فبراير 2022 أرسل تقرير نشر 23 فبراير 2022 بتاريخ 4 دقائق مضت قال Med Foud: الفكرة ببساطة هي : شكرا لإرفاق الشيفرة، أنا أفهم هذا الأمر، لكن أحتاج لفهم دقيق للعمليات التي تقوم بها كلا الدالتين لاستخدام تعليمات برمجية من الممكن أن تحل المشكلة، يفترض أن البرمجة متزامنة و أن استدعاء الدوال تسلسلي، فكيف يتم استدعاء دالة قبل انتهاء ما قبلها؟ يمكن تجريب حل بسيط وهو استدعاء الدالة الثانية ضمن الدالة الأولى في آخر سطر لها مثلاً .. private void loadBannerAd () { ...//الدالة الأولى ... showBannerAd(); } اقتباس
0 Mohamed Foudane نشر 23 فبراير 2022 الكاتب أرسل تقرير نشر 23 فبراير 2022 public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); loadAdmobBanner(); } public void loadAdmobBanner() { try { admobBanner = new AdView(this); admobBanner.setAdSize(AdSize.BANNER); admobBanner.setAdUnitId(this.getResources().getString(R.string.admob_banner_id)); AdRequest adRequest = new AdRequest.Builder().build(); admobBanner.loadAd(adRequest); } catch (Exception ignored) { } } public static void showBannerAd (Activity activity, LinearLayout adContainer) { try { adContainer.addView(admobBanner); } catch (Exception ignored) { } } هذا هو الكود، لاحظ معي ان دالة loadAdmobBanner باستدعائها في MainApplication Class. في حين اقوم بإستدعاء دالة showAdmobBanner في MainActivity مثلا... في حالة تأخر اعلان البانر في التحميل بسبب ضعف الانترنيت مثلا وإشتغلت MainActivity قبل انتهاء تحميل الإعلان فإنه لن يظهر حتى اعمل refresh ل MainActivity. هل اتضح المشكل سيدي ام لا ؟ اقتباس
0 Wael Aljamal نشر 23 فبراير 2022 أرسل تقرير نشر 23 فبراير 2022 بتاريخ 10 دقائق مضت قال Med Foud: هل اتضح المشكل سيدي ام لا ؟ تمام، حسب مفهوم android life cycle بعد انتهاء إنشاء العرض أي انتهاء الدالة on Create يتم مناداة on Start يمكنك نقل استدعاء الدوال التي يجب تنفيذها بعد نهاية الإنشاء ل on Start حاول إضافة هذه: @Override public void onStart () { super.onStart(); showAdmobBanner(); } أو مجرد نقل الاستدعاء لنهاية loadAdmobBanner public void loadAdmobBanner() { try { admobBanner = new AdView(this); admobBanner.setAdSize(AdSize.BANNER); admobBanner.setAdUnitId(this.getResources().getString(R.string.admob_banner_id)); AdRequest adRequest = new AdRequest.Builder().build(); admobBanner.loadAd(adRequest); // هنا showAdmobBanner(); } catch (Exception ignored) { } } اقتباس
0 Mohamed Foudane نشر 23 فبراير 2022 الكاتب أرسل تقرير نشر 23 فبراير 2022 المشكلة كما ذكرت ان showAdmobBanner لا استدعيها في نفس Activity 1 اقتباس
0 Wael Aljamal نشر 23 فبراير 2022 أرسل تقرير نشر 23 فبراير 2022 بتاريخ 16 دقائق مضت قال Med Foud: المشكلة كما ذكرت ان showAdmobBanner لا استدعيها في نفس Activity هل حاولت استعمال startActivityForResult أي تقوم بتشغيل نشاط آخر و بعد انتهائه و تعود بنتيجة نشغل دالة في النشاط الحالي؟ نبدأ النشاط رقم 2 من النشاط رقم 1 button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Intent intent=new Intent(MainActivity.this,SecondActivity.class); startActivityForResult(intent, 2);// Activity is started with requestCode 2 } }); بعد العودة من النشاط 2 للنشاط 1 نستدعي الدالة @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // check if the request code is same as what is passed here it is 2 if(requestCode==2) { // استدعاء الدالة } } بتاريخ 49 دقائق مضت قال Med Foud: المشكلة كما ذكرت ان showAdmobBanner لا استدعيها في نفس Activity الحل الأمثل هو عمل async task ثم ضمن الدالة do in background يمكنك تنفيذ الدوال وراء بعضها. أو استخدام executor Executor executor = anExecutor(); executor.execute(new RunnableTask1()); executor.execute(new RunnableTask2()); اقتباس
0 Mohamed Foudane نشر 24 فبراير 2022 الكاتب أرسل تقرير نشر 24 فبراير 2022 قمت بحل المشكلة عن طريق تحميل الإعلان في كل نشاط قبلي لكل نشاط أريد إظهار الإعلان فيه... 1 اقتباس
السؤال
Mohamed Foudane
السلام عليكم
هل هناك امكانية لتشغيل دالتين بالترتيب بحيث لا تبدأ الأولى حتى تكتمل الثانية ؟
تعبت في البحث عن طريقة للقيام بهذا ..
8 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.