English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Meccanismo di trigger e considerazioni di onNewIntent() su Android

1. onNewIntent()

Ri Scrivere i Seguenti Metodi in IntentActivity: onCreate onStart onRestart onResume onPause onStop onDestroy onNewIntent

1. Altre applicazioni inviano Intent, eseguire i seguenti metodi:

onCreate
onStart
onResume

Metodo di invio di Intent:

Uri uri = Uri.parse("philn://blog.163.com");
Intent it = new Intent(Intent.ACTION_VIEW, uri);  
startActivity(it);

2. Dichiarazione di ricezione di 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. Se l'IntentActivity si trova in cima alla pila delle attività, ossia l'Activity precedentemente aperta che ora si trova in stato onPause, onStop, quando un'altra applicazione invia un Intent, l'ordine di esecuzione è:

onNewIntent, onRestart, onStart, onResume.

Nel processo di sviluppo di un'applicazione Android, è molto semplice avviare un'altra Activity da un'Activity e passare alcuni dati all'altra Activity, ma quando si ha bisogno di far tornare in primo piano un'Activity in esecuzione in background e passare alcuni dati, potrebbe sorgere un piccolo problema.

Prima di tutto, per impostazione predefinita, quando si avvia un'Activity tramite Intent, anche se esiste già un'istanza di Activity in esecuzione, il sistema creerà una nuova istanza di Activity e la visualizzerà. Per evitare che l'istanza di Activity venga istanziata più volte, è necessario configurare il modo di caricamento dell'activity (launchMode) in AndroidManifest.xml per implementare il modello di singola attività, come mostrato di seguito:

<activity android:label="@string/app_name" android:launchmode="singleTask"android:name="Activity1"></activity>

Quando il launchMode è singleTask, attraverso l'Intent si lancia un'Activity, se il sistema esiste già un'istanza, il sistema invierà la richiesta a questa istanza, ma in questo momento, il sistema non chiamerà il metodo onCreate che di solito elabora i dati della richiesta, ma chiamerà il metodo onNewIntent, come indicato di seguito:

protected void onNewIntent(Intent intent) {
 super.onNewIntent(intent);
 setIntent(intent);//è necessario memorizzare il nuovo intent a meno che getIntent() restituisca l'uno antico
 processExtraData();
}

Non dimenticare che il sistema potrebbe uccidere l'Activity in esecuzione in background in qualsiasi momento, se tutto ciò accade, il sistema chiamerà il metodo onCreate senza chiamare il metodo onNewIntent, una buona soluzione è chiamare lo stesso metodo di elaborazione dei dati sia nel metodo onCreate che nel metodo onNewIntent, come indicato di seguito:

public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 processExtraData();
}
protected void onNewIntent(Intent intent) {
 super.onNewIntent(intent);
  setIntent(intent);//è necessario memorizzare il nuovo intent a meno che getIntent() restituisca l'uno antico
 processExtraData();
}
private void processExtraData(){
 Intent intent = getIntent();
 //usare i dati ricevuti qui
}

Secondo, setIntent() e getIntent() di onNewIntent()

@Override
protected void onNewIntent(Intent intent) {
 super.onNewIntent(intent);
 // setIntent(intent);
 int data = getIntent().getIntExtra("HAHA", 0);
 // int data = intent.getIntExtra("HAHA", 0);
}

Se non si chiama setIntent(intent), i dati ottenuti da getIntent() non saranno quelli attesi. Tuttavia, sembra che intent.getInXxx possa fornire i risultati corretti.

Attenzione a questa frase:

Notare che getIntent() restituisce sempre l'Intent originale. Puoi utilizzare setIntent(Intent) per aggiornarlo a questo nuovo Intent.

Quindi è meglio chiamare setIntent(intent), in modo che non ci siano problemi quando si utilizza getIntent().

Di seguito è riassunta la guida ai meccanismi di trigger e alle注意事项 di Android onNewIntent(), ulteriori informazioni verranno aggiunte in seguito, grazie per il supporto a questo sito!

Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, il copyright spetta ai rispettivi autori, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato editato manualmente e non assume alcuna responsabilità legale correlata. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, questo sito rimuoverà immediatamente il contenuto sospetto di violazione del copyright.

Ti potrebbe interessare