2012-06-06 7 views
7

Supponiamo di avere due attività.
A - attività principale, ovvero "home launcher abilitato" (filtri intenzionali, ecc.)

B - attività radice attività con specifica singleTask (può esserci solo un'istanza di questa attività) e con taskAffinità personalizzata (a differenziare se dalla radice dell'attività principale).Come rimuovere l'attività singleTask con taskAffinity dalle attività recenti al termine?

Supponiamo che B rappresenti un'attività, che è valida solo quando non è terminata: ritornare ad essa o ricominciare da attività recenti dopo averla terminata non è un'opzione.

In un certo punto del tempo - A avvia B per iniziare una nuova attività. L'obiettivo è rimuovere B dall'elenco delle attività recenti quando l'utente termina B. L'utente può spostarsi da B ad altre attività (usando home press lunga) e quindi tornare a B finché non è terminato. Avviare A dal programma di avvio non porterà B in primo piano poiché hanno affinità diverse.

Android riconosce B come una radice di un'attività, quindi B è visibile nell'elenco delle attività recenti anche se è terminato e l'utente può sempre tornare ad esso. Non è una soluzione per spostare B sull'unica attività con A, perché nel tempo B è in esecuzione - l'utente dovrebbe essere in grado di passare tra le attività A e B. L'aggiunta di excludeFromRecents al manifest di B la rimuove completamente dall'elenco delle attività recenti, ed è anche una soluzione cattiva.

Come raggiungerlo? (Dispiace per il mio cattivo inglese)

+0

La chiamata alla fine() in onResume() quando l'attività è terminata non è corretta? – pawelzieba

+0

Ma rimane ancora nell'elenco delle attività recenti –

+0

@MichaelP Vuoi che non compaia mai nelle attività recenti? O semplicemente sparisci quando hai finito? –

risposta

3

risposta standard

Mi dispiace essere portatore di cattive notizie, ma questa funzionalità non può essere raggiunto utilizzando metodi standard senza sostituire il modo che il funzionamento dell'app. Anche così, funzionerà solo fino a quando la tua app è in esecuzione. Inoltre, per fare ciò sarà necessario un dispositivo rooted con una ROM specializzata, poiché in ogni caso non è possibile ignorare la funzionalità del pulsante Home. Tutto ciò che puoi fare è rispondere a onNewIntent() che non si attiva se premi a lungo il pulsante Home.

Attività recenti è specificamente per la facilità di utilizzo per consentire all'utente di tornare a qualsiasi app che hanno utilizzato, indipendentemente dal fatto che l'app sia in esecuzione. Comunque, ci sono buone notizie. Questo processo non mantiene viva la tua app! È semplicemente un'icona che punta al tuo pacco.

Sfortunatamente, questo significa che se la tua app è ancora in esecuzione, sta accadendo qualcos'altro che la sta mantenendo in esecuzione.

risposta non standard

Potrebbe essere possibile modificando le proprietà del pacchetto in fase di esecuzione (molto nello stesso modo in cui è possibile abilitare/disabilitare i componenti dal codice Java). Questo è altamente sconsigliato, perché Attività recenti è una funzione di usabilità della piattaforma principale di Android. Ciò richiederebbe qualche ricerca.

0

Un po 'in ritardo, ma questo risulta ancora il primo successo su Google. Vedere la risposta this per una possibile soluzione.

Nel tuo caso si dovrà:

  • creare una nuova attività C chiama ExitActivity, e aggiungere le bandiere si manifestano come descritto nel altra risposta.
  • attività B dovrebbe avere i seguenti attributi nel manifesto: android:taskAffinity="com.example.ActivityB" android:allowTaskReparenting="true" android:launchMode="singleTask" android:documentLaunchMode="always"
  • impostare l'attributo compito di affinità su C per essere lo stesso di B
  • La chiamata a Intent.addFlags nel ExitActivity dovrebbe essere solo gli ultimi tre: intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
Problemi correlati