English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
1. onNewIntent()
في ActivityIntent يتم تعديل الآتي: onCreate onStart onRestart onResume onPause onStop onDestroy onNewIntent
1- إذا أرسل تطبيق آخر Intent، تنفيذ الأساليب التالية:
onCreate
onStart
onResume
طريقة إرسال Intent:
Uri uri = Uri.parse("philn://blog.163.com"); Intent it = new Intent(Intent.ACTION_VIEW, uri); startActivity(it);
2- إعلان استقبال Intent:
<activity android:name=".IntentActivity" android:launchMode="singleTask" android:label="@string/testname"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="philn"/> </intent-filter> </activity>
3- إذا كان IntentActivity في قمة است堆اد المهام، أي أن Activity التي تم فتحها من قبل الآن تمر بمرحلة onPause أو onStop، إذا أرسلت تطبيق آخر Intent، فإن ترتيب التنفيذ يكون كما يلي:
onNewIntent،onRestart،onStart،onResume.
في تطوير تطبيقات Android، من السهل إطلاق Activity أخرى من Activity أخرى ونقل بعض البيانات إلى Activity الجديدة، ولكن عندما تحتاج إلى إعادة Activity التي تعمل في الخلفية إلى المقدمة ونقل بعض البيانات قد تكون هناك بعض المشاكل الصغيرة.
أولاً، في الحالة الافتراضية، عندما تقوم بتشغيل Activity عبر Intent، حتى لو كان هناك Activity مشابهة قيد التشغيل بالفعل، ستقوم النظام بإنشاء نموذج Activity جديد وعرضه. لتجنب تكرار إنشاء نموذج Activity، يجب علينا تكوين طريقة تحميل activity في AndroidManifest.xml (launchMode) لتحقيق نمط مهمة واحدة، كما هو موضح أدناه:
<activity android:label="@string/app_name" android:launchmode="singleTask"android:name="Activity1"></activity>
عندما يكون launchMode = singleTask، يتم فتح Activity باستخدام Intent إذا كان النظام يحتوي على مثيل موجود، فإن النظام سيقوم بإرسال الطلب إلى هذا المثيل، ولكن في هذه الحالة لن يدعو النظام طريقة onCreate التي نعالج فيها البيانات عادةً، بل سيقوم بندعوة طريقة onNewIntent، مثلما يلي:
protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent);//يجب حفظ النية الجديدة إلا إذا كان getIntent() سيقوم بإرجاع النية القديمة processExtraData(); }
لا تنسى أن النظام قد يقتل نشاط التشغيل الخلفي في أي وقت، إذا حدث ذلك، فإن النظام سيقوم بندعوة طريقة onCreate وليس طريقة onNewIntent، حل جيد هو دعوة نفس طريقة معالجة البيانات في طريقتي onCreate وonNewIntent، مثلما يلي:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); processExtraData(); } protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent);//يجب حفظ النية الجديدة إلا إذا كان getIntent() سيقوم بإرجاع النية القديمة processExtraData(); } private void processExtraData(){ Intent intent = getIntent(); //استخدام البيانات المُستلمة هنا }
ثانيًا: setIntent() وgetIntent() في onNewIntent()
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); // setIntent(intent); int data = getIntent().getIntExtra("HAHA", 0); // int data = intent.getIntExtra("HAHA", 0); }
إذا لم يتم استدعاء setIntent(intent)، فإن البيانات التي يحصل عليها getIntent() لن تكون كما تتوقع. ولكن يبدو أن intent.getInXxx يمكن أن يوفر النتيجة الصحيحة.
لاحظ هذه الجملة:
لاحظ أن getIntent() لا يزال يعود إلى Intent الأصلي. يمكنك استخدام setIntent(Intent) لتحديثه إلى هذا Intent الجديد.
لذلك من الأفضل استدعاء setIntent(intent)، حتى لا يكون هناك أي مشكلة عند استدعاء getIntent().
هذا هو جمع المعلومات حول آلية إطلاق onNewIntent() لـ Android و الملاحظات اللازمة، وسنستمر في إضافة المعلومات ذات الصلة، شكرًا للدعم الذي يقدمونه للموقع!
البيان: محتويات هذا المقال تم جمعها من الإنترنت، ملكية المحتويات مملوكة للجميع، ومحتويات يتم جمعها من قبل المستخدمين عبر الإنترنت بشكل تلقائي، ولا تملك هذا الموقع حقوق الملكية، ولا يتم تعديل المحتويات بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية متعلقة بذلك. إذا وجدت محتويات مشبوهة في حقوق النسخ، فيرجى إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # بـ @) للإبلاغ، وقدم الأدلة ذات الصلة، وإذا تم التحقق من ذلك، سيتم حذف المحتويات المشبوهة بشكل فوري.