Остановите все в деятельности после ее выхода - PullRequest
0 голосов
/ 21 апреля 2020

Я новичок и работаю над приложением android. Я хочу остановить каждый процесс и все действия, когда я покидаю его.

Например: я на самом деле в " first_activity.class "

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);

Если я оставлю first_activity.class до 10 секунд и до go до second_activity.class , я не хочу видеть тостное сообщение в моей фактической (second_activity.class) активности.

Как я мог это сделать?

Редактировать: Я сделал это тостовое сообщение, чтобы упростить мой вопрос.

Чтобы быть более понятным:

Этот first_activity.class содержит один запрос AsyncTask. Это запрос AsyncTask, который я хочу остановить при изменении активности.

Вот часть этого запроса:

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) {
         ....
        }
    }

Я также хочу остановить все, что обрабатывается в этой first_activity, когда Я оставляю это.

Спасибо.

Ответы [ 3 ]

1 голос
/ 21 апреля 2020

Toast особенный, потому что он будет отображаться даже после того, как действие будет скрыто. Это потому, что он использует Сервис. I Это не произойдет, например, с Snackbar.

Но вы можете сохранить созданный вами экземпляр Toast с помощью makeText, чтобы иметь возможность скрыть его при закрытии действия.

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();
    }
}
0 голосов
/ 21 апреля 2020

Надеюсь, это поможет:

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 голосов
/ 21 апреля 2020

отмените тост с помощью этой функции перед выходом из упражнения:

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