Android: OnCreate () الحصول على استدعاء عدة مرات (وليس من قبلي)

StackOverflow https://stackoverflow.com/questions/4299899

سؤال

هناك شيء لا أفهمه تمامًا الآن.

تقوم فئة النشاط الرئيسية بإنشاء خدمة ، والتي تنشئ موضوعًا جديدًا ينتظر اتصال TCP. بمجرد وصول المرء ، سيبدأ نشاطًا جديدًا:

Intent dialogIntent = new Intent(getBaseContext(), VoIPCall.class);
dialogIntent.putExtra("inetAddress", clientSocket.getInetAddress());
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(dialogIntent);

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

لسبب ما ، لاحظت أن onCreate() من هذا الفصل الأخير يتم استدعاؤه مرة أخرى ، مما يجعل تعطل البرنامج. لا أفهم لماذا يطلق عليه مرة أخرى حيث يتم تشغيل المواضيع 2 فقط ، لا يوجد تفاعل مستخدم. تقول الوثائق: "تسمى عندما يتم إنشاء النشاط لأول مرة.". النشاط يعمل بالفعل وأنا لا أحاول إنشائه.

هل يمكن لأحد أن يشرح لي هذا السلوك؟

هل كانت مفيدة؟

المحلول

سوف يعيد Android إنشاء نشاطك بعد "تغييرات تكوين الجهاز". أحد الأمثلة على ذلك هو التوجه. يمكنك قراءة المزيد هنا...http://developer.android.com/guide/topics/resources/runtime-changes.html

ربما يكون هناك شيء في خيوطك هو القيام بشيء يعتبر تغيير التكوين؟

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

HTH

نصائح أخرى

كنت أعاني من نشاط يسمى مرتين على بعض أجهزة Samsung. لقد قمت بحلها إضافة Android: LaunchMode = "SingleInstance" على علامة النشاط على البيان. آمل أن يكون هذا يمكن أن تساعد.

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

لقد لاحظت هذه المشكلة عندما تحاول بدء نشاط مع قيم في النية.

فيما يلي مثال حيث يقوم Activity_A باستدعاء Activity_B ويمرر القيم في القصد الذي يتم جمعه في Activity_B:

Intent intent = new Intent(this, activityB.class);
intent.putExtra("val1", someValue1);
intent.putExtra("val2", someValue2);
intent.putExtra("val3", someValue3);
this.StartActivity(intent);

في هذه الحالة ، يمكنك تعيين ملف android:launchMode="singleInstance" أو android:launchModel="singleTop" في AndroidManifest.xml و Activity_B سيتم إطلاقه مرة واحدة فقط. أتمنى أن يساعدك هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top