English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
一、onNewIntent()
Redéfinissez les méthodes suivantes dans l'IntentActivity : onCreate, onStart, onRestart, onResume, onPause, onStop, onDestroy, onNewIntent
1、Lorsque d'autres applications envoient un Intent, exécutez les méthodes suivantes :
onCreate
onStart
onResume
Méthode d'envoi d'Intent :
Uri uri = Uri.parse("philn:",//blog.163.com"); Intent it = new Intent(Intent.ACTION_VIEW, uri); startActivity(it);
2、Déclaration de réception d'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>
3Si l'IntentActivity est au sommet du tas de tâches, c'est-à-dire que l'Activity précédemment ouverte est maintenant dans un état onPause, onStop, et qu'une autre application envoie un Intent, l'ordre d'exécution est :
onNewIntent, onRestart, onStart, onResume.
Lors du développement d'applications Android, il est très simple de démarrer une Activity à partir d'une autre Activity et de transmettre des données à la nouvelle Activity, mais lorsque vous avez besoin de faire revenir une Activity en cours d'exécution en arrière-plan à l'avant et de transmettre des données, cela peut poser quelques petits problèmes.
Tout d'abord, par défaut, lorsque vous démarrez une Activity via Intent, même si une Activity identique est déjà en cours d'exécution, le système crée toujours une nouvelle instance d'Activity et l'affiche. Pour éviter que l'instance d'Activity ne soit instanciée plusieurs fois, nous devons configurer le mode de chargement (launchMode) de l'activity dans AndroidManifest.xml pour réaliser le mode singleTask, comme suit :
<activity android:label="@string/app_name" android:launchmode="singleTask"android:name="Activity1></activity>
Lorsque le launchMode est singleTask, une Activity est démarrée via Intent. Si le système existe déjà une instance, le système enverra la demande à cette instance, mais à ce moment-là, le système ne appellera pas la méthode onCreate habituellement utilisée pour traiter les données de la demande, mais appelle la méthode onNewIntent, comme suit :
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent);//doit stocker le nouveau Intent, à moins que getIntent() ne renvoie l'ancien processExtraData(); int data = intent.getIntExtra("HAHA", 0);
N'oubliez pas que le système peut tuer l'Activity en arrière-plan à tout moment. Si cela se produit, le système appelle la méthode onCreate, mais pas onNewIntent. Une bonne solution consiste à appeler la même méthode de traitement des données dans les méthodes onCreate et onNewIntent, comme suit :
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); processExtraData(); int data = intent.getIntExtra("HAHA", 0); @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent);//doit stocker le nouveau Intent, à moins que getIntent() ne renvoie l'ancien processExtraData() int data = intent.getIntExtra("HAHA", 0); private void processExtraData(){ Intent intent = getIntent(); //utilisez les données reçues ici int data = intent.getIntExtra("HAHA", 0);
Deuxièmement, setIntent() et getIntent() de onNewIntent()
@Override @Override protected void onNewIntent(Intent intent) { // super.onNewIntent(intent); setIntent(intent); // int data = getIntent().getIntExtra("HAHA", 0); int data = intent.getIntExtra("HAHA", 0);
}
Si vous n'appelez pas setIntent(intent), les données obtenues par getIntent() ne seront pas celles que vous attendez. Cependant, il semble que vous puissiez obtenir le résultat correct en utilisant intent.getInXxx.
Notez cette phrase :
Il est donc préférable d'appeler setIntent(intent), de sorte que vous n'aurez pas de problème lors de l'utilisation de getIntent().
Voici la compilation des informations sur le mécanisme de déclenchement de Android onNewIntent() et les précautions à prendre. D'autres informations seront ajoutées ultérieurement, merci de votre soutien à ce site !
Déclaration : le contenu de cet article est issue du réseau, propriété des auteurs respectifs. Le contenu est contribué et téléversé par les utilisateurs d'Internet, ce site ne détient pas de droits de propriété, n'a pas été traité par l'éditeur humain et n'assume aucune responsabilité juridique connexe. Si vous trouvez du contenu présumé de droit d'auteur, veuillez envoyer un email à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un email pour signaler des infractions, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu présumé illicite.