Android: Toast is not showing before system.exit()

对着背影说爱祢 提交于 2019-12-13 09:04:24

问题


I have nested nested class where I am trying to display a toast for the outer most class before I exit the app. The toast works just fine if I comment out exit statement, so I know I'm accessing the context correctly. I have also tried putting the toast in a thread where it sleeps for 2000 ms (and vice versa for the exit statement), but that still does not work.

All I want to do display a toast and exit the program. (It would be nice to do it simultaneously, if possible...)

    public class A extends Service {


        private Context context;

       //...

        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {

            context = this;
            //...
            return START_STICKY;
        }

        Handler disToast= new Handler(new Callback() {

             @Override
             public boolean handleMessage(Message msg) {
                Toast.makeText(context, "see ya", Toast.LENGTH_SHORT).show();
                return true;//also tried false, but that did not work...
            }
       });

       private Runnable r = new Runnable() {

          public void run() {


        new CountDownTimer(3000, 1000) {

            public void onFinish() {

                Message msg=disToast.obtainMessage();
                msg.obj="my message";
                disToast.sendMessage(msg);

                handler.removeCallbacks(updateTimerThread);
                System.exit(0);
            }
        }.start();//end of inner most class

     };//end of first inner class

 }//outermost class

EDIT** Why all the down votes? I'm not working with any Activities (outer most class is a Service, and the two inner are normal Java classes) so some of the answers (although I very much appropriate the responses) do not work.


回答1:


Thank you all who tried answering this for me, but unfortunately the solutions did not work.

Turns out that I have to do this when I try using Toast within a Service.

Once again, to those who tried answering it: thank you.

To those who down voted my post without stating the reason, next time leave constructive criticism rather than leaving me in the dark. I'm here to learn and I can't learn if you simply down vote with providing a legit reason. I'm not a mind reader.




回答2:


USE getApplicationConext() INSTEAD OF CONTEXT

Toast.makeText(getApplicationConext(), "Timer up. Existing app...", Toast.LENGTH_SHORT).show();



回答3:


Handler disToast= new Handler(new Callback() {
   @Override 
   public void handleMessage(Message msg) { 
             String mString=(String)msg.obj;
             Toast.makeText(this, mString, Toast.LENGTH_SHORT).show();
          }
});

 private Runnable r = new Runnable() {


    public void run() {


        new CountDownTimer(3000, 1000) {

            public void onFinish() {



            Message msg=disToast.obtainMessage();
            msg.obj="your message";
            disToast.sendMessage(msg);

                handler.removeCallbacks(updateTimerThread);
                System.exit(0);
            }
        }.start();

};

More details Refer Here




回答4:


please use

Toast.LENGTH_LONG instead of

Toast.LENGTH_SHORT


 Toast.makeText(context, "Timer up. Existing app...", Toast.LENGTH_LONG).show();

Now your toast will be display after System.exit();



来源:https://stackoverflow.com/questions/35570530/android-toast-is-not-showing-before-system-exit

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!