www myactivity historial google descargar chrome buscado borrar actividad android android-activity android-intent

android - historial - myactivity whatsapp



¿Cómo borrar la intención de que comenzó la actividad? (9)

Al principio, la actividad se inicia con un intento y se hace algo con este intento.

Cuando cambio la orientación de mi Actividad, se vuelve a cargar y el Intento se pasa a la Actividad.

¿Cómo puedo borrar esa intención para evitar que la actividad la vuelva a usar?

Intenté setIntent(null) , pero sin resultado.


En mi caso, necesitaba establecer los datos en nulo:

getIntent().setData(null);


Incluso después de borrar manualmente los extras de intención e intención después de que se hayan analizado, parece que Activity.getIntent () siempre devolverá la intención original que inició la actividad.

Para evitar esto, recomiendo algo como esto:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // The Intent provided by getIntent() (and its extras) will persist through a restore // via savedInstance. Because of this, restoring this activity from a // an instance that was originally started with extras (deep-link or // pre-defined destination) may cause un-desired behavior // (ie...infinite loop of sending the user directly to somewhere else because of a // pre-defined alternate destination in the Intent''s extras). // // To get around this, if restoring from savedInstanceState, we explicitly // set a new Intent *** to override the original Intent that started the activity.*** // Note...it is still possible to re-use the original Intent values...simply // set them in the savedInstanceState Bundle in onSavedInstanceState. if (savedInstanceState != null) { // Place savedInstanceState Bundle as the Intent "extras" setIntent(new Intent().putExtras(savedInstanceState)); } processIntent(getIntent()) } private void processIntent(Intent intent) { if (getIntent().getExtras() == null) { // Protection condition return; } doSomething(intent.getExtras.getString("SOMETHING_I_REALLY_NEED_TO_PERSIST")); final String somethingIDontWantToPersist = intent.getExtras.getString("SOMETHING_I_DONT_WANT_TO_PERSIST"); if(somethingIDontWantToPersist != null) { doSomething(somethingIDontWantToPersist); } } @Override public void onSaveInstanceState(Bundle savedInstanceState) { // Save selective extras from original Intent... savedInstanceState.putString("SOMETHING_I_REALLY_NEED_TO_PERSIST", "persistedValued"); super.onSaveInstanceState(savedInstanceState); }

De esta forma, hay un mecanismo para volcar el Intento original mientras se retiene la capacidad de retener explícitamente ciertas partes del original Intent / Intent extras.

Tenga en cuenta que no he probado todos los modos de inicio de actividad.


Mi sugerencia sería alternar esto con una variable booleana para verificar cuándo se creó o no su actividad.

De lo contrario, puede ver su método onCreate, afaik esto solo se ejecuta cuando la actividad se crea por primera vez.


No use setIntent(null) . Parece que si bien puede funcionar a veces, bajo ciertas condiciones la intención original puede regresar.

En su lugar, llame a setIntent() con una intención simple que no tenga una acción, datos o extras, como un new Intent(Context, Class) .

De hecho, el uso de setIntent() realidad no fue una buena decisión de diseño de API en primer lugar. En cambio, como notó dcg, asegúrese de verificar solo su intento la primera vez, cuando su estado de savedInstanceState aún sea nulo.


Publicación anterior, pero alguien podría usar esto.

No pierdas el tiempo, si tu aplicación se reanuda, la intención será allí de nuevo.

Use el intento inicial en el "Curriculum de actividad", y simplemente agregue un valor extra

putExtra("DONE", 0)

Y cada vez que se reanude su aplicación, verifique si ya tiene este valor:

hasExtra("DONE")

fácil


Si configura la acción de intención, puede getIntent().setAction(""); con getIntent().setAction("");

Por ejemplo en onCreate(...) :

... String action = getIntent().getAction(); if (action != null) { if (action.equals(YOUR_ACTION_WHATEVER)) { doSomethingHere(); // do something here getIntent().setAction(""); // clear the action } } ...

Esto borrará la acción, de lo contrario se invocará cada vez que gire el dispositivo.


Si su intención es enviada a su actividad con una acción (con setAction), solo haga lo siguiente cuando reciba la intención, para evitar el manejo múltiple de esta intención cuando la pantalla gira:

Intent i = getIntent(); i.setAction(null); setIntent(i);


Tuve un problema similar. Esto me ayudó. Quizás también deba usar onSaveInstanceState (Bundle outState) y agregar datos adicionales al paquete para que inState no sea nulo, no estoy seguro.

Intent activityIntent = null; // Subsequent times it''s null @Override protected void onCreate(Bundle inState) { super.onCreate(inState); . . if (inState!=null) { /*Recreating activity with a saved state*/ } else { /*Creating activity*/ activityIntent = getIntent(); // First time through intent is used /*Get your Extra Intent data here. You will be capturing data on 1st creation. */ }


intent.putExtra(YourKey,""); //reset the value to knknown setIntent(intent);