удалить тост, а также уничтожить или принудительно остановить поток - PullRequest
0 голосов
/ 13 февраля 2012

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

мой код указан ниже:

public void customToast(int x, int y, String str) {
    if (Util.tipson == true) {
        toast = new Toast(getApplicationContext());
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.TOP, x, y);
        LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        toastView = li.inflate(R.layout.toastlayout, null);
        toast.setView(toastView);
        TextView text = (TextView) toastView.findViewById(R.id.text);
        text.setText(str);
        // toast.show();

        fireLongToast();
    }

}

private void fireLongToast() {

    t = new Thread() {
        public void run() {
            int count = 0;
            try {
                while (true && count < 40) {
                    try {
                        toast.show();
                        sleep(100);
                        count++;
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                    // do some logic that breaks out of the while loop
                }

                toast = null;
                toastView = null;
            } catch (Exception e) {
                Log.e("LongToast", "", e);
            }
        }
    };
    t.start();
}

Ответы [ 5 ]

1 голос
/ 13 февраля 2012

Вам нужно остановить свою тему самостоятельно.Так как java не позволяет вам использовать функцию stop ().

Напишите класс для вашей темы следующим образом:

public class YourThread extends Thread {
        private volatile boolean stopped = false;

        public void run() {
            int count = 0;
            try {
                while (true && count < 40 && !stopped) {
                    try {
                        toast.show();
                        sleep(100);
                        count++;
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                    // do some logic that breaks out of the while loop
                }

                toast = null;
                toastView = null;
            } catch (Exception e) {
                Log.e("LongToast", "", e);
            }
        }

        public void stopThread() {
            stopped = true;
        }
    }

Теперь, когда ваша деятельность, для которой завершена тема, остановит вашу тему

@Override
protected void onDestroy() {
   if(isFinishing())
      yourThreadVariable.stopThread();
}
0 голосов
/ 28 июля 2012

Я хотел бы также предложить метод Лалита Поптани и реализовать его:

protected void onStop(){
   handler.removeCallbacks(runnable);
   super.onStop();
}

Документация для метода:

onStop, Вызывается, когда действие больше не виднопользователю, потому что другое действие было возобновлено и покрывает это.Это может произойти либо потому, что начинается новое действие, либо перед ним передается существующее, либо уничтожается.http://developer.android.com/reference/android/app/Activity.html

0 голосов
/ 13 февраля 2012

Чтобы остановить поток, вы можете просто использовать interrupt().Но для лучшего решения я бы сказал, не использовать Thread.Просто создайте Handler с помощью Runnable и управляйте своим Runnable с помощью Handler, это было бы неплохо, поскольку Android дал обработчик для управления одним или несколькими Runnables.

Создание Runnable

Runnable runnable = new Runnable() {

        @Override
        public void run() {
            // put your code stuff here
        }
    };

Для запуска Runnable используйте

handler.postDelayed(runnable, your_time_in_millis);

Чтобы остановить Runnable используйте

handler.removeCallbacks(runnable);
0 голосов
/ 13 февраля 2012

Не знаю наверняка, но вы можете вызвать функцию join из thread в onDestroy вашей деятельности.

0 голосов
/ 13 февраля 2012

Имеет ли завершение какое-либо действие?

...