0
votes

Arrêter tout dans une activité après l'avoir quittée

Je suis débutant et travaille sur une application Android. Je veux arrêter chaque processus et tout d'une activité lorsque je la quitte.

Par exemple: Je suis actuellement dans " first_activity.class "

class SendPostReqAsyncTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... params) {
            List<NameValuePair> nameValuePairs = new ArrayList<>();
            nameValuePairs.add(new BasicNameValuePair("tel_recover_accounte", tel_recover_accounte));
            try {
                HttpClient httpClient = new DefaultHttpClient();
                HttpParams param = httpClient.getParams();
                HttpConnectionParams.setConnectionTimeout(param, 15000);
                HttpPost httpPost = new HttpPost(ServerURL);
                httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse httpResponse = httpClient.execute(httpPost);
                httpResponse.getEntity();
                str =  EntityUtils.toString(httpResponse.getEntity());
            } catch (IOException ignored) {
            }
            return str;
        }
        @Override
        protected void onPostExecute(String result) {
         ....
        }
    }

Si je quitte first_activity.class avant 10 secondes et allez à second_activity.class , je ne veux pas voir le message toast dans mon activité (second_activity.class) réelle.

Comment puis-je faire cela?

Modifier: J'ai fait ce message toast pour simplifier ma question.

Pour être plus clair:

Ce first_activity.class contient une requête AsyncTask. C'est cette demande AsyncTask que je veux arrêter quand je change d'activité.

Voici une partie de cette demande:

new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
             Toast.makeText(Con_send_code_sms_accounte_recover.this, "in first activity", Toast.LENGTH_SHORT).show();
        }
    }, 10000);

Je veux aussi tout arrêter qui est en cours de traitement dans cette première_activité lorsque je la quitte.

Merci.


0 commentaires

3 Réponses :


1
votes

Toast est spécial car il restera affiché même après que l'activité est masquée. C'est parce qu'il utilise un service. Cela n'arrivera pas avec Snackbar par exemple.

Mais vous pouvez conserver l'instance de Toast que vous créez avec makeText afin de pouvoir la masquer lorsque l'activité est fermée.

public class MainActivity extends AppCompatActivity {

    private Toast toast;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Create a toast to be used later.
        toast = Toast.makeText(requireActivity(), "Hello world!", Toast.LENGTH_LONG);

        Button btn = view.findViewById(R.id.btn);
        btn.setOnClickListener(v -> {
            toast.show();
        });
    }

    @Override
    public void onPause() {
        // Activity goes to background, hide toast.
        super.onPause();
        toast.cancel();
    }
}

p>


0 commentaires

-1
votes

annulez votre toast par cette fonction avant de quitter l'activité:

public static void cancelToast() {
    if (null != toast) {
      toast.cancel();
    }
  }


0 commentaires

0
votes

J'espère que cela aide:

public class MainActivity extends AppCompatActivity {


    Handler handler;
    Runnable runnable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.page);


        handler = new Handler();
        runnable = new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this, "in first activity", Toast.LENGTH_SHORT).show();
            }
        };
        handler.postDelayed(runnable,10000);

    }


    @Override
    public void onPause() {
    super.onPause();
        handler.removeCallbacks(runnable);

    }
}


0 commentaires