Android:Toast 在 system.exit() 之前未显示

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

我嵌套了 nested class,在我退出应用程序之前,我试图在其中显示最外层 class 的 toast。如果我注释掉 exit 语句,toast 工作得很好,所以我知道我正在正确访问上下文。我也试过将 toast 放在线程中休眠 2000 毫秒(exit 语句反之亦然),但这仍然不起作用。

我只想干杯并退出程序。 (最好能同时进行,如果可能...)

    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

编辑** 为什么全是反对票?我没有使用任何活动(最外面的 class 是一个 Service,里面的两个是正常的 Java classes)所以一些答案(虽然我非常恰当的回应)不起作用。

使用 getApplicationConext() 代替上下文

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

请使用

Toast.LENGTH_LONG 而不是

Toast.LENGTH_SHORT


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

现在您的 toast 将在 System.exit();

之后显示
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();

};

更多详情参考Here

感谢所有尝试为我回答此问题的人,但不幸的是,这些解决方案均无效。

事实证明,当我尝试在 Service.

中使用 Toast 时,我必须执行 this

再次感谢尝试回答的人:谢谢。

那些在不说明原因的情况下给我post投反对票的人,下次留下建设性的批评而不是离开我在黑暗中。我是来学习的,如果您只是提供合法理由就否决投票,我将无法学习。我没脑子reader.