Domanda

Ho questo problema in Android.ho un'attività principale che chiama un thread con questo

   Runnable work = new Runnable() {

    public void run() {
        while (kill) {
            try {
                Thread.sleep(5000);
                connect();
                } catch (InterruptedException ex) {
                Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
            }
        }


    }
};

kill è un booleano pubblico in MainActivity. cosa posso fare per salvare il thread così quando riprendo l'attività posso ancora terminare il thread?

È stato utile?

Soluzione

Penso che tu voglia fare qualcosa di più vicino a ciò che questa soluzione propone.

Tuttavia, se vuoi davvero continuare a farlo in un Thread, allora ti suggerisco di estendere una nuova classe da Thread e aggiungere un metodo chiamato killMe().Questo modificherà il flag booleano kill (ora privato ).Quindi, nel tuo onRetainNonConfigurationInstance() puoi restituire questo Thread e puoi recuperarlo di nuovo in onResume.Se torni e l'attività non è stata interrotta, allora va bene, puoi semplicemente chiamare killMe() sul Thread esistente.

Esempio:

 @Override
  public Object onRetainNonConfigurationInstance() {
    return thread;
  }

Altri suggerimenti

Perché vuoi terminare il thread nel curriculum?

Perché non avviare il thread nella parte di curriculum, quindi inserire un blocco finalmente per gestire il fatto che il connect() è interrotto, e poi quando ricomincia devi solo riconnetterti ed eseguire l'operazione.

Nel caso dei dispositivi mobili, la soluzione migliore è contrassegnare in un archivio persistente la posizione in cui ti trovi, in modo che se vieni interrotto puoi continuare quando il Activity viene riavviato.

Hai un'elevata possibilità di essere interrotto, quindi progettalo.

Il thread potrebbe essere ucciso dal sistema operativo quindi non c'è nulla da salvare e uccidere in seguito.

Se hai davvero bisogno di fare qualcosa del genere, avvia un RemoteService poiché verrà eseguito in un processo diverso dal tuo Activity ed è più probabile che rimanga in circolazione.

Potresti voler dare un'occhiata a questa domanda:

Android Remote Service

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top